From cc3bb3e97441172797aeec52a09030e2330b1f1f Mon Sep 17 00:00:00 2001 From: Dorian Zedler Date: Fri, 5 Aug 2022 07:46:55 +0000 Subject: [PATCH] =?UTF-8?q?Update=20pages=20=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- annotated.html | 117 + classQBluetoothLeUartClient.html | 548 +++++ classQBluetoothLeUartDevice.html | 154 ++ classQBluetoothLeUartDeviceModel.html | 119 + favicon-dark.png | Bin 0 -> 380 bytes files.html | 114 + index.html | 104 + m-dark+documentation.compiled.css | 2923 +++++++++++++++++++++++++ md__drone_src_README.html | 99 + modules.html | 114 + namespaces.html | 114 + pages.html | 115 + refman.pdf | Bin 0 -> 105490 bytes search-v2.js | 897 ++++++++ searchdata-v2.js | 2 + 15 files changed, 5420 insertions(+) create mode 100644 annotated.html create mode 100644 classQBluetoothLeUartClient.html create mode 100644 classQBluetoothLeUartDevice.html create mode 100644 classQBluetoothLeUartDeviceModel.html create mode 100644 favicon-dark.png create mode 100644 files.html create mode 100644 index.html create mode 100644 m-dark+documentation.compiled.css create mode 100644 md__drone_src_README.html create mode 100644 modules.html create mode 100644 namespaces.html create mode 100644 pages.html create mode 100644 refman.pdf create mode 100644 search-v2.js create mode 100644 searchdata-v2.js diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..2d3bacc --- /dev/null +++ b/annotated.html @@ -0,0 +1,117 @@ + + + + + Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

Classes

+ + +
+
+
+
+ + + + + + diff --git a/classQBluetoothLeUartClient.html b/classQBluetoothLeUartClient.html new file mode 100644 index 0000000..9b7b22b --- /dev/null +++ b/classQBluetoothLeUartClient.html @@ -0,0 +1,548 @@ + + + + + QBluetoothLeUartClient class | Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

+ QBluetoothLeUartClient class +

+

The QBluetoothLeUartClient class can be used to talk to BluetoothLE devices via UART effordlessly. It can be used via C++ and QML.

+ +

C++ example:

#include <qbluetoothleuartclient.h>
+class MyBluetoothLeClass : QObject {
+public:
+    MyBluetoothLeClass(QObject* parent = nullptr) : QObject(parent) {
+        this->ble = new QBluetoothLeUartClient();
+
+        connect(this->ble, &QBluetoothLeUartClient::foundNewDevice, this, &MyBluetoothLeClass::handleFoundNewDevice);
+        connect(this->ble, &QBluetoothLeUartClient::connectedToDevice, this, &MyBluetoothLeClass::handleBluetoothDeviceConected);
+        connect(this->ble, &QBluetoothLeUartClient::dataReceived, this, &MyBluetoothLeClass::handleDataReceived);
+
+        this->ble->startScanningForDevices();
+    }
+
+private:
+    QBluetoothLeUartClient *ble;
+
+private slots:
+    void handleFoundNewDevice(QBluetoothLeUartDevice* device) {
+        qDebug() << "Found a device: name: " << device->getName() << " address: " << device->getAddress();
+
+        if(device->getName() == "My device name"){
+            this->ble->stopScanningForDevices();
+            this->ble->connectToDevice(device);
+        }
+    }
+
+    void handleBluetoothDeviceConected()  {
+        this->ble->sendData("This is my test message");
+    }
+
+    void handleDataReceived(const QString &s) {
+        qDebug() << "Data received: " << s;
+    }
+};

QML example:

import de.itsblue.bluetoothleuart 1.0
+
+QBluetoothLeUartClient {
+    id: ble
+    Component.onCompleted: {
+        ble.startScanningForDevices()
+    }
+
+    onFoundNewDevice: {
+        console.log("Found a device: name: " + device.name + " address: " + device.address)
+        if(device.name === "My device name") {
+            ble.stopScanningForDevices()
+            ble.connectToDevice(device)
+       }
+    }
+
+    onConnectedToDevice: {
+        ble.sendData("This is my test message")
+    }
+
+    onDataReceived: {
+        console.log("Data received: " + data)
+    }
+}

To get all available devices in a model, use the QBluetoothLeUartDeviceModel.

+
+

Public types

+
+
+ enum BluetoothLeUartClientState { Idle = 0, + AdapterTurnedOff, + LocationPermissionDenied, + Scanning, + ScanFinished, + Connecting, + ScanningForService, + ServiceFound, + Connected } +
+
The BluetoothLeUartState enum contains all state of the QBluetoothLeUart class.
+
+
+
+

Public static functions

+
+
+ static void init() +
+
Function to register QMl types.
+
+
+
+

Public functions

+
+
+ void setUUIDs(const char uartServiceUUID[36], + const char txUUID[36], + const char rxUUID[36]) +
+
Function to set the UUIDs of the bluetooth service.
+
+
+
+

Public slots

+
+
+ auto startScanningForDevices() -> Q_INVOKABLE bool +
+
Fuction to start scanning for devices.
+
+ auto stopScanningForDevices() -> Q_INVOKABLE bool +
+
Function to stop scanning for devices.
+
+ auto getAvailableDevices() -> Q_INVOKABLE QList<QBluetoothLeUartDevice*> +
+
Function to get all devices that were found during the last scan.
+
+ auto getAvailableDevicesDetailList() -> Q_INVOKABLE QVariantList +
+
Function to get a variant list of all devices that were found during the last scan.
+
+ auto getAvailableDevicesModel() -> Q_INVOKABLE QBluetoothLeUartDeviceModel* +
+
Function to get a QBluetoothLeUartDeviceModel with all available devices.
+
+ auto getCurrentDevice() -> Q_INVOKABLE QBluetoothLeUartDevice* +
+
Function to get the currently connected device.
+
+ auto connectToDevice(int deviceId) -> Q_INVOKABLE bool +
+
Function connect to a device using its internal id.
+
+ auto connectToDevice(QBluetoothLeUartDevice* device) -> Q_INVOKABLE bool +
+
Function connect to a device using a QBluetoothLeUartDevice object.
+
+ auto disconnectFromDevice() -> Q_INVOKABLE bool +
+
Function to disconnect from the current device.
+
+ auto sendData(QString data, + bool asynchronous = true) -> Q_INVOKABLE bool +
+
Function to send data to the connected device.
+
+ auto getState() const -> Q_INVOKABLE QBluetoothLeUartClient::BluetoothLeUartClientState +
+
Function to get the current state of QBluetoothLeUart.
+
+
+
+

Enum documentation

+
+

+ enum QBluetoothLeUartClient::BluetoothLeUartClientState +

+

The BluetoothLeUartState enum contains all state of the QBluetoothLeUart class.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Enumerators
Idle +

Waiting for instrucions

+
AdapterTurnedOff +

The bluetooth adapter is turned off

+
LocationPermissionDenied +

The location permssion was denied and we are therfor unable to scan!

+
Scanning +

Scanning for devices

+
ScanFinished +

Scanning has finished, we are ready to connect

+
Connecting +

Trying to connect

+
ScanningForService +

Connection was successfull, now scanning for services

+
ServiceFound +

Services were found

+
Connected +

Connected. We are now ready to send and receive

+
+
+
+
+

Function documentation

+
+

+ void QBluetoothLeUartClient::setUUIDs(const char uartServiceUUID[36], + const char txUUID[36], + const char rxUUID[36]) +

+

Function to set the UUIDs of the bluetooth service.

+ + + + + + + + + + + + + + + + + + +
Parameters
uartServiceUUIDService UUID
txUUIDUUID of the characteristic used to send data
rxUUIDUUID of the characteristic used to receive data
+
+
+

+ Q_INVOKABLE bool QBluetoothLeUartClient::startScanningForDevices() public slot +

+

Fuction to start scanning for devices.

+ + + + + + + +
Returnstrue if the scan started, false if the current state was not Idle
+

This function will start the device scanning process and might emit the following signals during scanning:

  • foundNewDevice() when a new device is found
  • avaliableDevicesChanged() when a new device is found
  • scanFinished() when the scan has finished
  • scanningErrorOccured() when an error occured
+
+
+

+ Q_INVOKABLE bool QBluetoothLeUartClient::stopScanningForDevices() public slot +

+

Function to stop scanning for devices.

+ + + + + + + +
Returnstrue if the scan was stopped, false if the current state was not Scanning
+
+
+

+ Q_INVOKABLE QList<QBluetoothLeUartDevice*> QBluetoothLeUartClient::getAvailableDevices() public slot +

+

Function to get all devices that were found during the last scan.

+ + + + + + + +
ReturnsList of all devices found during last scan
+

A QBluetoothLeUartDevice object can be used to connect to the specific device

+
+
+

+ Q_INVOKABLE QVariantList QBluetoothLeUartClient::getAvailableDevicesDetailList() public slot +

+

Function to get a variant list of all devices that were found during the last scan.

+ + + + + + + +
ReturnsVariant list of all devices found during last scan
+

This will return a QVariantList that contains QVariantMaps. The maps contain the following keys:

  • "id" (int): the internal id of the device (used to connect to it)
  • "name" (QString): the name of the device
  • "address" (QString): the bluetooth address of the device
+
+
+

+ Q_INVOKABLE QBluetoothLeUartDeviceModel* QBluetoothLeUartClient::getAvailableDevicesModel() public slot +

+

Function to get a QBluetoothLeUartDeviceModel with all available devices.

+ + + + + + + +
ReturnsA QBluetoothLeUartDeviceModel with all available devices
+ +
+
+

+ Q_INVOKABLE QBluetoothLeUartDevice* QBluetoothLeUartClient::getCurrentDevice() public slot +

+

Function to get the currently connected device.

+ + + + + + + +
ReturnsThe currently connected device or nullptr if no device is connected
+
+
+

+ Q_INVOKABLE bool QBluetoothLeUartClient::connectToDevice(int deviceId) public slot +

+

Function connect to a device using its internal id.

+ + + + + + + + + + + + + + + + +
Parameters
deviceIdthe internal id of the device
Returnsfalse if the device was not found in the internal list of discovered devices, true otherwise
+

The id can be found using getAvailableDevicesDetailList() The connectedToDevice() signal will be emited as soon as the connection was successfull. As soon as that signal was emited, the sendData() slot can be used to send data and the dataReceived() signal will be emited whenever data is received.

+
+
+

+ Q_INVOKABLE bool QBluetoothLeUartClient::connectToDevice(QBluetoothLeUartDevice* device) public slot +

+

Function connect to a device using a QBluetoothLeUartDevice object.

+ + + + + + + + + + + + + + + + +
Parameters
deviceThe device to connect to
Returnsfalse if the device was not found in the internal list of discovered devices, true otherwise
+

The QBluetoothLeUartDevice can be found using getAvailableDevices() The connectedToDevice() signal will be emited as soon as the connection was successfull. As soon as that signal was emited, the sendData() slot can be used to send data and the dataReceived() signal will be emited whenever data is received.

+
+
+

+ Q_INVOKABLE bool QBluetoothLeUartClient::disconnectFromDevice() public slot +

+

Function to disconnect from the current device.

+ + + + + + + +
Returnsfalse if no device was connected, true otherwise
+
+
+

+ Q_INVOKABLE bool QBluetoothLeUartClient::sendData(QString data, + bool asynchronous = true) public slot +

+

Function to send data to the connected device.

+ + + + + + + + + + + + + + + + + + + + +
Parameters
dataThe data to send
asynchronous
Returnsfalse if there was not device connected, true otherwise
+
+
+

+ Q_INVOKABLE QBluetoothLeUartClient::BluetoothLeUartClientState QBluetoothLeUartClient::getState() const public slot +

+

Function to get the current state of QBluetoothLeUart.

+ + + + + + + +
ReturnsThe current state
+ +
+
+
+
+
+
+ + + + + + diff --git a/classQBluetoothLeUartDevice.html b/classQBluetoothLeUartDevice.html new file mode 100644 index 0000000..06cdae5 --- /dev/null +++ b/classQBluetoothLeUartDevice.html @@ -0,0 +1,154 @@ + + + + + QBluetoothLeUartDevice class | Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

+ QBluetoothLeUartDevice class +

+

The QBluetoothLeUartDevice class is a helper class for use with QBluetoothLeUart. It is used to get device details and connect to devices.

+ +
+

Public functions

+
+
+ auto getName() -> Q_INVOKABLE QString +
+
Function to get the name of the device.
+
+ auto getAddress() -> Q_INVOKABLE QString +
+
Function to get the address of the device.
+
+
+
+

Function documentation

+
+

+ Q_INVOKABLE QString QBluetoothLeUartDevice::getName() +

+

Function to get the name of the device.

+ + + + + + + +
ReturnsThe name of the device
+
+
+

+ Q_INVOKABLE QString QBluetoothLeUartDevice::getAddress() +

+

Function to get the address of the device.

+ + + + + + + +
Returnsaddress of the device
+
+
+
+
+
+
+ + + + + + diff --git a/classQBluetoothLeUartDeviceModel.html b/classQBluetoothLeUartDeviceModel.html new file mode 100644 index 0000000..b39e3dc --- /dev/null +++ b/classQBluetoothLeUartDeviceModel.html @@ -0,0 +1,119 @@ + + + + + QBluetoothLeUartDeviceModel class | Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

+ QBluetoothLeUartDeviceModel class +

+

The QBluetoothLeUartDeviceModel class can be used to display available devices in a QML ListView.

+

Example implementation:

import de.itsblue.bluetoothleuart 1.0
+
+QBluetoothLeUartClient {
+    id: ble
+    Component.onCompleted: {
+        ble.startScanningForDevices()
+    }
+}
+
+ListView {
+    model: ble.availableDevicesModel
+
+    delegate: ItemDelegate {
+        width: parent.width
+
+        text: name
+
+        onClicked: backend.bleController.connectToDevice(device)
+    }
+}
+
+
+
+
+ + + + + + diff --git a/favicon-dark.png b/favicon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..c2498580c1aeb9dc13d311f1785319025ec8e299 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m+AU64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1Tkdb&7< zSoGeV?5NFBC~>S_`|=i}-=YT7Padn`>b# z#-|U~KTAvL@1NW}Hzhmx)17mMt7=aCeXE+Tu9&=7S?5gnj;`}NclWK#&8=bGIZyxk=h6Uv70<|T%c?G1a5bK$ zvUi4y=d7&sa{sr>(>;Sq3ti{$JNRyL*!63ieM)Uzu6a?uGU+o`&g43#a^|ex=GfaQ zMT>lHbTFJ?l#{#7u&3NA<)*ff#AJqqNg@qFCx8CzWC;2`r~i!nImh){e;(_7S;cQs XpYeAO6X!QzATW5k`njxgN@xNAhZ>zq literal 0 HcmV?d00001 diff --git a/files.html b/files.html new file mode 100644 index 0000000..ba60259 --- /dev/null +++ b/files.html @@ -0,0 +1,114 @@ + + + + + Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

Files

+
    +
+ +
+
+
+
+ + + +
+ + diff --git a/index.html b/index.html new file mode 100644 index 0000000..b6d315d --- /dev/null +++ b/index.html @@ -0,0 +1,104 @@ + + + + + Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

+ Qt BluetoothLE UART library +

+

Introduction

This library can be used to talk to BLE devices via UART in Qt. It was designed to make talking to devices like the ESP32 from Qt easier.

Installation

cd yourRepo
+git submodule add https://itsblue.dev/itsblue-development/QBluetoothLeUart.git
+git submodule update --init --recursive

And in your MyProject.pro include the .pri file:

# Optional: enable QML stuff
+CONFIG += QBluetoothLeUart_QML
+# Include library
+include($$PWD/QBluetoothLeUart/QBluetoothLeUart.pri)

To enable the QML module you need to call QBluetoothLeUart::init(); somewhere before app.exec(); in your main.cpp.

Getting_started

This library currently supports: BluetoothLE UART client

UART client

To get started with the BLE client, see the docs of QBluetoothLeUartClient.

+
+
+
+
+ + + +
+ + diff --git a/m-dark+documentation.compiled.css b/m-dark+documentation.compiled.css new file mode 100644 index 0000000..8cc82fb --- /dev/null +++ b/m-dark+documentation.compiled.css @@ -0,0 +1,2923 @@ +/* Generated using `./postprocess.py m-dark.css m-documentation.css -o m-dark+documentation.compiled.css`. Do not edit. */ + +/* + This file is part of m.css. + + Copyright © 2017, 2018, 2019, 2020, 2021, 2022 + Vladimír Vondruš + + 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 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. +*/ + +*, ::before, ::after { box-sizing: border-box; } +body { margin: 0; } +.m-container { + width: 100%; + margin: auto; + padding-left: 1rem; + padding-right: 1rem; +} +.m-row { + margin-left: -1rem; + margin-right: -1rem; +} +.m-row::after { + content: ' '; + clear: both; + display: table; +} +.m-row > [class*='m-col-'] { + position: relative; + padding: 1rem; +} +[class*='m-clearfix-']::after { + display: block; + content: ' '; + clear: both; +} +[class*='m-show-'] { + display: none; +} +.m-container-inflate, :not(.m-row) > [class*='m-col-'] { + margin-bottom: 1rem; +} +.m-container-inflate:last-child, :not(.m-row) > [class*='m-col-']:last-child { + margin-bottom: 0; +} +.m-container.m-nopad, [class*='m-col-'].m-nopad, +.m-container.m-nopadx, [class*='m-col-'].m-nopadx, +.m-container.m-nopadl, [class*='m-col-'].m-nopadl { + padding-left: 0; +} +.m-container.m-nopad, [class*='m-col-'].m-nopad, +.m-container.m-nopadx, [class*='m-col-'].m-nopadx, +.m-container.m-nopadr, [class*='m-col-'].m-nopadr { + padding-right: 0; +} +[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadt { + padding-top: 0; +} +[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadb, +.m-container-inflate.m-nopadb { + padding-bottom: 0; +} +[class*='m-col-t-'] { float: left; } +.m-left-t { + padding-right: 1rem; + float: left; +} +.m-right-t, [class*='m-col-t-'].m-right-t { + padding-left: 1rem; + float: right; +} +.m-center-t, [class*='m-col-t-'].m-center-t { + float: none; +} +.m-center-t, [class*='m-col-t-'].m-center-t { + margin-left: auto; + margin-right: auto; + float: none; +} +.m-col-t-1 { width: calc(1 * 100% / 12); } +.m-col-t-2 { width: calc(2 * 100% / 12); } +.m-col-t-3 { width: calc(3 * 100% / 12); } +.m-col-t-4 { width: calc(4 * 100% / 12); } +.m-col-t-5 { width: calc(5 * 100% / 12); } +.m-col-t-6 { width: calc(6 * 100% / 12); } +.m-col-t-7 { width: calc(7 * 100% / 12); } +.m-col-t-8 { width: calc(8 * 100% / 12); } +.m-col-t-9 { width: calc(9 * 100% / 12); } +.m-col-t-10 { width: calc(10 * 100% / 12); } +.m-col-t-11 { width: calc(11 * 100% / 12); } +.m-col-t-12 { width: calc(12 * 100% / 12); } +.m-push-t-1 { left: calc(1 * 100% / 12); } +.m-push-t-2 { left: calc(2 * 100% / 12); } +.m-push-t-3 { left: calc(3 * 100% / 12); } +.m-push-t-4 { left: calc(4 * 100% / 12); } +.m-push-t-5 { left: calc(5 * 100% / 12); } +.m-push-t-6 { left: calc(6 * 100% / 12); } +.m-push-t-7 { left: calc(7 * 100% / 12); } +.m-push-t-8 { left: calc(8 * 100% / 12); } +.m-push-t-9 { left: calc(9 * 100% / 12); } +.m-push-t-10 { left: calc(10 * 100% / 12); } +.m-push-t-11 { left: calc(11 * 100% / 12); } +.m-pull-t-1 { right: calc(1 * 100% / 12); } +.m-pull-t-2 { right: calc(2 * 100% / 12); } +.m-pull-t-3 { right: calc(3 * 100% / 12); } +.m-pull-t-4 { right: calc(4 * 100% / 12); } +.m-pull-t-5 { right: calc(5 * 100% / 12); } +.m-pull-t-6 { right: calc(6 * 100% / 12); } +.m-pull-t-7 { right: calc(7 * 100% / 12); } +.m-pull-t-8 { right: calc(8 * 100% / 12); } +.m-pull-t-9 { right: calc(9 * 100% / 12); } +.m-pull-t-10 { right: calc(10 * 100% / 12); } +.m-pull-t-11 { right: calc(11 * 100% / 12); } +@media screen and (min-width: 576px) { + .m-container { width: 560px; } + .m-container-inflatable .m-col-s-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) { + margin-left: -10%; + margin-right: -10%; + } + .m-container-inflatable .m-col-s-10 .m-container-inflate.m-left-s { + margin-left: -10%; + } + .m-container-inflatable .m-col-s-10 .m-container-inflate.m-right-s { + margin-right: -10%; + } + [class*='m-col-s-'] { float: left; } + .m-left-s { + padding-right: 1rem; + float: left; + } + .m-right-s, [class*='m-col-s-'].m-right-s { + padding-left: 1rem; + float: right; + } + .m-center-s, [class*='m-col-s-'].m-center-s { + margin-left: auto; + margin-right: auto; + float: none; + } + .m-col-s-1 { width: calc(1 * 100% / 12); } + .m-col-s-2 { width: calc(2 * 100% / 12); } + .m-col-s-3 { width: calc(3 * 100% / 12); } + .m-col-s-4 { width: calc(4 * 100% / 12); } + .m-col-s-5 { width: calc(5 * 100% / 12); } + .m-col-s-6 { width: calc(6 * 100% / 12); } + .m-col-s-7 { width: calc(7 * 100% / 12); } + .m-col-s-8 { width: calc(8 * 100% / 12); } + .m-col-s-9 { width: calc(9 * 100% / 12); } + .m-col-s-10 { width: calc(10 * 100% / 12); } + .m-col-s-11 { width: calc(11 * 100% / 12); } + .m-col-s-12 { width: calc(12 * 100% / 12); } + .m-push-s-0 { left: calc(0 * 100% / 12); } + .m-push-s-1 { left: calc(1 * 100% / 12); } + .m-push-s-2 { left: calc(2 * 100% / 12); } + .m-push-s-3 { left: calc(3 * 100% / 12); } + .m-push-s-4 { left: calc(4 * 100% / 12); } + .m-push-s-5 { left: calc(5 * 100% / 12); } + .m-push-s-6 { left: calc(6 * 100% / 12); } + .m-push-s-7 { left: calc(7 * 100% / 12); } + .m-push-s-8 { left: calc(8 * 100% / 12); } + .m-push-s-9 { left: calc(9 * 100% / 12); } + .m-push-s-10 { left: calc(10 * 100% / 12); } + .m-push-s-11 { left: calc(11 * 100% / 12); } + .m-pull-s-0 { right: calc(0 * 100% / 12); } + .m-pull-s-1 { right: calc(1 * 100% / 12); } + .m-pull-s-2 { right: calc(2 * 100% / 12); } + .m-pull-s-3 { right: calc(3 * 100% / 12); } + .m-pull-s-4 { right: calc(4 * 100% / 12); } + .m-pull-s-5 { right: calc(5 * 100% / 12); } + .m-pull-s-6 { right: calc(6 * 100% / 12); } + .m-pull-s-7 { right: calc(7 * 100% / 12); } + .m-pull-s-8 { right: calc(8 * 100% / 12); } + .m-pull-s-9 { right: calc(9 * 100% / 12); } + .m-pull-s-10 { right: calc(10 * 100% / 12); } + .m-pull-s-11 { right: calc(11 * 100% / 12); } + .m-clearfix-t::after { display: none; } + .m-hide-s { display: none; } + .m-show-s { display: block; } + .m-col-s-none { + width: auto; + float: none; + } +} +@media screen and (min-width: 768px) { + .m-container { width: 750px; } + .m-container-inflatable .m-col-m-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) { + margin-left: -10%; + margin-right: -10%; + } + .m-container-inflatable .m-col-m-10 .m-container-inflate.m-left-m { + margin-left: -10%; + } + .m-container-inflatable .m-col-m-10 .m-container-inflate.m-right-m { + margin-right: -10%; + } + [class*='m-col-m-'] { float: left; } + .m-left-m { + padding-right: 1rem; + float: left; + } + .m-right-m, [class*='m-col-m-'].m-right-m { + padding-left: 1rem; + float: right; + } + .m-center-m, [class*='m-col-m-'].m-center-m { + margin-left: auto; + margin-right: auto; + float: none; + } + .m-col-m-1 { width: calc(1 * 100% / 12); } + .m-col-m-2 { width: calc(2 * 100% / 12); } + .m-col-m-3 { width: calc(3 * 100% / 12); } + .m-col-m-4 { width: calc(4 * 100% / 12); } + .m-col-m-5 { width: calc(5 * 100% / 12); } + .m-col-m-6 { width: calc(6 * 100% / 12); } + .m-col-m-7 { width: calc(7 * 100% / 12); } + .m-col-m-8 { width: calc(8 * 100% / 12); } + .m-col-m-9 { width: calc(9 * 100% / 12); } + .m-col-m-10 { width: calc(10 * 100% / 12); } + .m-col-m-11 { width: calc(11 * 100% / 12); } + .m-col-m-12 { width: calc(12 * 100% / 12); } + .m-push-m-0 { left: calc(0 * 100% / 12); } + .m-push-m-1 { left: calc(1 * 100% / 12); } + .m-push-m-2 { left: calc(2 * 100% / 12); } + .m-push-m-3 { left: calc(3 * 100% / 12); } + .m-push-m-4 { left: calc(4 * 100% / 12); } + .m-push-m-5 { left: calc(5 * 100% / 12); } + .m-push-m-6 { left: calc(6 * 100% / 12); } + .m-push-m-7 { left: calc(7 * 100% / 12); } + .m-push-m-8 { left: calc(8 * 100% / 12); } + .m-push-m-9 { left: calc(9 * 100% / 12); } + .m-push-m-10 { left: calc(10 * 100% / 12); } + .m-push-m-11 { left: calc(11 * 100% / 12); } + .m-pull-m-0 { right: calc(0 * 100% / 12); } + .m-pull-m-1 { right: calc(1 * 100% / 12); } + .m-pull-m-2 { right: calc(2 * 100% / 12); } + .m-pull-m-3 { right: calc(3 * 100% / 12); } + .m-pull-m-4 { right: calc(4 * 100% / 12); } + .m-pull-m-5 { right: calc(5 * 100% / 12); } + .m-pull-m-6 { right: calc(6 * 100% / 12); } + .m-pull-m-7 { right: calc(7 * 100% / 12); } + .m-pull-m-8 { right: calc(8 * 100% / 12); } + .m-pull-m-9 { right: calc(9 * 100% / 12); } + .m-pull-m-10 { right: calc(10 * 100% / 12); } + .m-pull-m-11 { right: calc(11 * 100% / 12); } + .m-clearfix-s::after { display: none; } + .m-hide-m { display: none; } + .m-show-m { display: block; } + .m-col-m-none { + width: auto; + float: none; + } +} +@media screen and (min-width: 992px) { + .m-container { width: 960px; } + .m-container-inflatable .m-col-l-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) { + margin-left: -10%; + margin-right: -10%; + } + .m-container-inflatable .m-col-l-10 .m-container-inflate.m-left-l { + margin-left: -10%; + } + .m-container-inflatable .m-col-l-10 .m-container-inflate.m-right-l { + margin-right: -10%; + } + [class*='m-col-l-'] { float: left; } + .m-left-l { + padding-right: 1rem; + float: left; + } + .m-right-l, [class*='m-col-l-'].m-right-l { + padding-left: 1rem; + float: right; + } + .m-center-l, [class*='m-col-l-'].m-center-l { + margin-left: auto; + margin-right: auto; + float: none; + } + .m-col-l-1 { width: calc(1 * 100% / 12); } + .m-col-l-2 { width: calc(2 * 100% / 12); } + .m-col-l-3 { width: calc(3 * 100% / 12); } + .m-col-l-4 { width: calc(4 * 100% / 12); } + .m-col-l-5 { width: calc(5 * 100% / 12); } + .m-col-l-6 { width: calc(6 * 100% / 12); } + .m-col-l-7 { width: calc(7 * 100% / 12); } + .m-col-l-8 { width: calc(8 * 100% / 12); } + .m-col-l-9 { width: calc(9 * 100% / 12); } + .m-col-l-10 { width: calc(10 * 100% / 12); } + .m-col-l-11 { width: calc(11 * 100% / 12); } + .m-col-l-12 { width: calc(12 * 100% / 12); } + .m-push-l-0 { left: calc(0 * 100% / 12); } + .m-push-l-1 { left: calc(1 * 100% / 12); } + .m-push-l-2 { left: calc(2 * 100% / 12); } + .m-push-l-3 { left: calc(3 * 100% / 12); } + .m-push-l-4 { left: calc(4 * 100% / 12); } + .m-push-l-5 { left: calc(5 * 100% / 12); } + .m-push-l-6 { left: calc(6 * 100% / 12); } + .m-push-l-7 { left: calc(7 * 100% / 12); } + .m-push-l-8 { left: calc(8 * 100% / 12); } + .m-push-l-9 { left: calc(9 * 100% / 12); } + .m-push-l-10 { left: calc(10 * 100% / 12); } + .m-push-l-11 { left: calc(11 * 100% / 12); } + .m-pull-l-0 { right: calc(0 * 100% / 12); } + .m-pull-l-1 { right: calc(1 * 100% / 12); } + .m-pull-l-2 { right: calc(2 * 100% / 12); } + .m-pull-l-3 { right: calc(3 * 100% / 12); } + .m-pull-l-4 { right: calc(4 * 100% / 12); } + .m-pull-l-5 { right: calc(5 * 100% / 12); } + .m-pull-l-6 { right: calc(6 * 100% / 12); } + .m-pull-l-7 { right: calc(7 * 100% / 12); } + .m-pull-l-8 { right: calc(8 * 100% / 12); } + .m-pull-l-9 { right: calc(9 * 100% / 12); } + .m-pull-l-10 { right: calc(10 * 100% / 12); } + .m-pull-l-11 { right: calc(11 * 100% / 12); } + .m-clearfix-m::after { display: none; } + .m-hide-l { display: none; } + .m-show-l { display: block; } + .m-col-l-none { + width: auto; + float: none; + } +} + +html { + font-size: 16px; + background-color: #2f363f; +} +body { + font-family: 'Source Sans Pro', sans-serif; + font-size: 1rem; + line-height: normal; + color: #dcdcdc; +} +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + font-weight: 600; +} +h1 { + margin-bottom: 1rem; +} +h2, h3, h4, h5, h6 { + margin-bottom: 0.5rem; +} +p, ul, ol, dl { + margin-top: 0; +} +ul, ol { + padding-left: 2rem; +} +ul ol, ul ul, ol ol, ol ul { + margin-bottom: 0; +} +main p { + text-indent: 1.5rem; + text-align: justify; +} +main p.m-noindent, li > p, dd > p, table.m-table td > p { + text-indent: 0; + text-align: left; +} +blockquote { + margin-top: 0; + margin-left: 1rem; + margin-right: 1rem; + padding: 1rem; + border-left-style: solid; + border-left-width: 0.25rem; +} +hr { + width: 75%; + border-width: 0.0625rem; + border-style: solid; +} +blockquote, hr { + border-color: #405363; +} +strong, .m-text.m-strong { font-weight: bold; } +em, .m-text.m-em { font-style: italic; } +s, .m-text.m-s { text-decoration: line-through; } +sub, sup, .m-text.m-sub, .m-text.m-sup { + font-size: 0.75rem; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup, .m-text.m-sup { top: -0.35rem; } +sub, .m-text.m-sub { bottom: -0.2rem; } +abbr { + cursor: help; + text-decoration: underline dotted; +} +a { + color: #5b9dd9; +} +a.m-flat { + text-decoration: none; +} +a:hover, a:focus, a:active { + color: #a5c9ea; +} +a img { border: 0; } +svg a { cursor: pointer; } +mark { + padding: 0.0625rem; + background-color: #c7cf2f; + color: #2f83cc; +} +.m-link-wrap { + word-break: break-all; +} +pre, code { + font-family: 'Source Code Pro', monospace, monospace, monospace; + font-size: 0.9em; + color: #e6e6e6; + background-color: #282e36; +} +pre.m-console, code.m-console { + color: #e6e6e6; + background-color: #1a1c1d; +} +pre { + padding: 0.5rem 1rem; + border-radius: 0.2rem; + overflow-x: auto; + margin-top: 0; +} +pre.m-console-wrap { + white-space: pre-wrap; + word-break: break-all; +} +code { + padding: 0.125rem; +} +*:focus { outline-color: #5b9dd9; } +div.m-scroll { + max-width: 100%; + overflow-x: auto; +} +.m-fullwidth { + width: 100%; +} +.m-spacing-150 { + line-height: 1.5rem; +} +.m-text-center, .m-text-center.m-noindent, table.m-table th.m-text-center, .m-text-center p { + text-align: center; +} +.m-text-left, .m-text-left.m-noindent, table.m-table th.m-text-left, .m-text-right p { + text-align: left; +} +.m-text-right, .m-text-right.m-noindent, table.m-table th.m-text-right, .m-text-right p { + text-align: right; +} +.m-text-top, table.m-table th.m-text-top, table.m-table td.m-text-top { + vertical-align: top; +} +.m-text-middle, table.m-table th.m-text-middle, table.m-table td.m-text-middle { + vertical-align: middle; +} +.m-text-bottom, table.m-table th.m-text-bottom, table.m-table td.m-text-bottom { + vertical-align: bottom; +} +.m-text.m-tiny { font-size: 50.0%; } +.m-text.m-small { font-size: 85.4%; } +.m-text.m-big { font-size: 117%; } +h1 .m-thin, h2 .m-thin, h3 .m-thin, h4 .m-thin, h5 .m-thin, h6 .m-thin { + font-weight: normal; +} +ul.m-unstyled, ol.m-unstyled { + list-style-type: none; + padding-left: 0; +} +ul[class*='m-block-'], ol[class*='m-block-'] { + padding-left: 0; +} +ul[class*='m-block-'] li, ol[class*='m-block-'] li { + display: inline; +} +ul[class*='m-block-bar-'] li:not(:last-child)::after, ol[class*='m-block-bar-'] li:not(:last-child)::after { + content: " | "; +} +ul[class*='m-block-dot-'] li:not(:last-child)::after, ol[class*='m-block-dot-'] li:not(:last-child)::after { + content: " • "; +} +@media screen and (min-width: 576px) { + ul.m-block-bar-s, ol.m-block-bar-s, + ul.m-block-dot-s, ol.m-block-dot-s { padding-left: 2rem; } + ul.m-block-bar-s li, ol.m-block-bar-s li, + ul.m-block-dot-s li, ol.m-block-dot-s li { display: list-item; } + ul.m-block-bar-s li:not(:last-child)::after, ol.m-block-bar-s li:not(:last-child)::after, + ul.m-block-dot-s li:not(:last-child)::after, ol.m-block-dot-s li:not(:last-child)::after { content: ""; } +} +@media screen and (min-width: 768px) { + ul.m-block-bar-m, ol.m-block-bar-m, + ul.m-block-dot-m, ol.m-block-dot-m { padding-left: 2rem; } + ul.m-block-bar-m li, ol.m-block-bar-m li, + ul.m-block-dot-m li, ol.m-block-dot-m li { display: list-item; } + ul.m-block-bar-m li:not(:last-child)::after, ol.m-block-bar-m li:not(:last-child)::after, + ul.m-block-dot-m li:not(:last-child)::after, ol.m-block-dot-m li:not(:last-child)::after { content: ""; } +} +@media screen and (min-width: 992px) { + ul.m-block-bar-l, ol.m-block-bar-l, + ul.m-block-dot-l, ol.m-block-dot-l { padding-left: 2rem; } + ul.m-block-bar-l li, ol.m-block-bar-l li, + ul.m-block-dot-l li, ol.m-block-dot-l li { display: list-item; } + ul.m-block-bar-l li:not(:last-child)::after, ol.m-block-bar-l li:not(:last-child)::after, + ul.m-block-dot-l li:not(:last-child)::after, ol.m-block-dot-l li:not(:last-child)::after { content: ""; } +} +p.m-poem { + text-indent: 0; + text-align: left; + margin-left: 1.5rem; +} +p.m-transition { + color: #405363; + text-indent: 0; + text-align: center; + font-size: 2rem; +} +dl.m-diary { + margin-bottom: 1.25rem; +} +dl.m-diary:last-child { + margin-bottom: 0.25rem; +} +dl.m-diary dt { + font-weight: bold; + width: 6rem; + float: left; + clear: both; + padding-top: 0.25rem; +} +dl.m-diary dd { + padding-top: 0.25rem; + padding-left: 6rem; + margin-left: 0; +} +a.m-footnote, dl.m-footnote dd span.m-footnote { + top: -0.35rem; + font-size: 0.75rem; + line-height: 0; + position: relative; + vertical-align: baseline; +} +a.m-footnote, dl.m-footnote dd span.m-footnote a { + text-decoration: none; +} +a.m-footnote::before { content: '['; } +a.m-footnote::after { content: ']'; } +dl.m-footnote dt { + width: 1.5rem; + float: left; + clear: both; +} +dl.m-footnote dd { + margin-left: 1.5rem; +} +dl.m-footnote { + font-size: 85.4%; +} +dl.m-footnote dd span.m-footnote a { + font-weight: bold; + font-style: italic; +} +.m-note { + border-radius: 0.2rem; + padding: 1rem; +} +.m-frame { + background-color: #2f363f; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #405363; + padding: 0.875rem; +} +.m-block { + border-style: solid; + border-width: 0.0625rem; + border-left-width: 0.25rem; + border-radius: 0.2rem; + border-color: #405363; + padding: 0.9375rem 0.9375rem 0.9375rem 0.75rem; +} +.m-block.m-badge::after { + content: ' '; + display: block; + clear: both; +} +.m-block.m-badge h3 { + margin-left: 5rem; +} +.m-block.m-badge p { + margin-left: 5rem; + text-indent: 0; +} +.m-block.m-badge img { + width: 4rem; + height: 4rem; + border-radius: 2rem; + float: left; +} +div.m-button { + text-align: center; +} +div.m-button a { + display: inline-block; + border-radius: 0.2rem; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + padding-left: 1.5rem; + padding-right: 1.5rem; + text-decoration: none; + font-size: 1.17rem; +} +div.m-button.m-fullwidth a { + display: block; + padding-left: 0.5rem; + padding-right: 0.5rem; +} +div.m-button a .m-big:first-child { + font-size: 1.37rem; + font-weight: bold; +} +div.m-button a .m-small:last-child { + font-size: 0.854rem; +} +.m-label { + border-radius: 0.2rem; + font-size: 75%; + font-weight: normal; + padding: 0.125rem 0.25rem; + vertical-align: 7.5%; +} +.m-label.m-flat { + border-width: 0.0625rem; + border-style: solid; + border-color: #747474; + padding: 0.0625rem 0.1875rem; +} +table.m-table { + border-collapse: collapse; + margin-left: auto; + margin-right: auto; +} +table.m-table.m-big { + margin-top: 1.75rem; +} +div.m-scroll > table.m-table:last-child { + margin-bottom: 0.0625rem; +} +table.m-table:not(.m-flat) tbody tr:hover { + background-color: #405363; +} +table.m-table th, table.m-table td { + vertical-align: top; + border-style: solid; + border-top-width: 0.0625rem; + border-left-width: 0; + border-right-width: 0; + border-bottom-width: 0; + border-color: #405363; +} +table.m-table caption { + padding-bottom: 0.5rem; +} +table.m-table thead tr:first-child th, table.m-table thead tr:first-child td { + border-top-width: 0.125rem; +} +table.m-table thead th, table.m-table thead td { + border-bottom-width: 0.125rem; + vertical-align: bottom; +} +table.m-table tfoot th, table.m-table tfoot td { + border-top-width: 0.125rem; +} +table.m-table th, table.m-table td { + padding: 0.5rem; +} +table.m-table.m-big th, table.m-table.m-big td { + padding: 0.75rem 1rem; +} +table.m-table th { + text-align: left; +} +table.m-table th.m-thin { + font-weight: normal; +} +table.m-table td.m-default, table.m-table th.m-default, +table.m-table td.m-primary, table.m-table th.m-primary, +table.m-table td.m-success, table.m-table th.m-success, +table.m-table td.m-warning, table.m-table th.m-warning, +table.m-table td.m-danger, table.m-table th.m-danger, +table.m-table td.m-info, table.m-table th.m-info, +table.m-table td.m-dim, table.m-table th.m-dim { + padding-left: 0.4375rem; + padding-right: 0.4375rem; + border-left-width: 0.0625rem; +} +table.m-table.m-big td.m-default, table.m-table.m-big th.m-default, +table.m-table.m-big td.m-primary, table.m-table.m-big th.m-primary, +table.m-table.m-big td.m-success, table.m-table.m-big th.m-success, +table.m-table.m-big td.m-warning, table.m-table.m-big th.m-warning, +table.m-table.m-big td.m-danger, table.m-table.m-big th.m-danger, +table.m-table.m-big td.m-info, table.m-table.m-big th.m-info, +table.m-table.m-big td.m-dim, table.m-table.m-big th.m-dim { + padding-left: 0.9375rem; + padding-right: 0.9375rem; + border-left-width: 0.0625rem; +} +table.m-table tr.m-default td, table.m-table td.m-default, +table.m-table tr.m-default th, table.m-table th.m-default, +table.m-table tr.m-primary td, table.m-table td.m-primary, +table.m-table tr.m-primary th, table.m-table th.m-primary, +table.m-table tr.m-success td, table.m-table td.m-success, +table.m-table tr.m-success th, table.m-table th.m-success, +table.m-table tr.m-warning td, table.m-table td.m-warning, +table.m-table tr.m-warning th, table.m-table th.m-warning, +table.m-table tr.m-danger td, table.m-table td.m-danger, +table.m-table tr.m-danger th, table.m-table th.m-danger, +table.m-table tr.m-info td, table.m-table td.m-info, +table.m-table tr.m-info th, table.m-table th.m-info, +table.m-table tr.m-dim td, table.m-table td.m-dim, +table.m-table tr.m-dim th, table.m-table th.m-dim { + border-color: #2f363f; +} +.m-note pre, .m-note code, +table.m-table tr.m-default pre, table.m-table tr.m-default code, +table.m-table td.m-default pre, table.m-table td.m-default code, +table.m-table th.m-default pre, table.m-table th.m-default code, +table.m-table tr.m-primary pre, table.m-table tr.m-primary code, +table.m-table td.m-primary pre, table.m-table td.m-primary code, +table.m-table th.m-primary pre, table.m-table th.m-primary code, +table.m-table tr.m-success pre, table.m-table tr.m-success code, +table.m-table td.m-success pre, table.m-table td.m-success code, +table.m-table th.m-success pre, table.m-table th.m-success code, +table.m-table tr.m-warning pre, table.m-table tr.m-warning code, +table.m-table td.m-warning pre, table.m-table td.m-warning code, +table.m-table th.m-warning pre, table.m-table th.m-warning code, +table.m-table tr.m-danger pre, table.m-table tr.m-danger code, +table.m-table td.m-danger pre, table.m-table td.m-danger code, +table.m-table th.m-danger pre, table.m-table th.m-danger code, +table.m-table tr.m-info pre, table.m-table tr.m-info code, +table.m-table td.m-info pre, table.m-table td.m-info code, +table.m-table th.m-info pre, table.m-table th.m-info code, +table.m-table tr.m-dim pre, table.m-table tr.m-dim code, +table.m-table td.m-dim pre, table.m-table td.m-dim code, +table.m-table th.m-dim pre, table.m-table th.m-dim code { + background-color: rgba(34, 39, 46, 0.5); +} +img.m-image, svg.m-image { + display: block; + margin-left: auto; + margin-right: auto; +} +div.m-image { + text-align: center; +} +img.m-image, svg.m-image, div.m-image img, div.m-image svg { + max-width: 100%; + border-radius: 0.2rem; +} +div.m-image.m-fullwidth img, div.m-image.m-fullwidth svg { + width: 100%; +} +img.m-image.m-badge, div.m-image.m-badge img { + border-radius: 50%; +} +figure.m-figure { + max-width: 100%; + margin-top: 0; + margin-left: auto; + margin-right: auto; + position: relative; + display: table; +} +figure.m-figure::before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #405363; +} +figure.m-figure.m-flat::before { + border-color: transparent; +} +figure.m-figure > * { + margin-left: 1rem; + margin-right: 1rem; + display: table-caption; + caption-side: bottom; +} +figure.m-figure > *:first-child { + display: inline; +} +figure.m-figure > *:last-child { + margin-bottom: 1rem !important; +} +figure.m-figure img, figure.m-figure svg { + position: relative; + margin-left: 0; + margin-right: 0; + margin-bottom: 0; + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; + max-width: 100%; +} +figure.m-figure.m-flat img, figure.m-figure.m-flat svg { + border-bottom-left-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} +figure.m-figure a img, figure.m-figure a svg { + margin-left: -1rem; + margin-right: -1rem; +} +figure.m-figure.m-fullwidth, figure.m-figure.m-fullwidth > * { + display: block; +} +figure.m-figure.m-fullwidth > *:first-child { + display: inline; +} +figure.m-figure.m-fullwidth img, figure.m-figure.m-fullwidth svg { + width: 100%; +} +figure.m-figure.m-fullwidth::after { + content: ' '; + display: block; + margin-top: 1rem; + height: 1px; +} +.m-code-figure, .m-console-figure { + margin-top: 0; + margin-left: 0; + margin-right: 0; + position: relative; + padding: 1rem; +} +.m-code-figure::before, .m-console-figure::before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; +} +.m-code-figure::before { + border-color: #282e36; +} +.m-console-figure::before { + border-color: #1a1c1d; +} +.m-code-figure.m-flat::before, .m-console-figure.m-flat::before { + border-color: transparent; +} +.m-code-figure > pre:first-child, .m-console-figure > pre:first-child { + position: relative; + margin: -1rem -1rem 1rem -1rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.m-code-figure > pre.m-nopad, .m-console-figure > pre.m-nopad { + margin-left: -0.875rem; + margin-right: -0.875rem; + margin-top: -1rem; + margin-bottom: -0.875rem; + padding-left: 0.875rem; +} +figure.m-figure figcaption, .m-code-figure figcaption, .m-console-figure figcaption { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + font-weight: 600; + font-size: 1.17rem; +} +figure.m-figure figcaption a, .m-code-figure figcaption a, .m-console-figure figcaption a { + text-decoration: none; +} +figure.m-figure figcaption .m-figure-description { + margin-top: 0.5rem; + font-weight: normal; + font-size: 1rem; +} +figure.m-figure figcaption .m-figure-description a { + text-decoration: underline; +} +.m-imagegrid > div { + background-color: #2f363f; +} +.m-imagegrid > div > figure { + display: block; + float: left; + position: relative; + margin: 0; +} +.m-imagegrid > div > figure > div, +.m-imagegrid > div > figure > figcaption, +.m-imagegrid > div > figure > a > div, +.m-imagegrid > div > figure > a > figcaption { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-color: #2f363f; + border-style: solid; + border-width: 0.25rem; + padding: 0.5rem; +} +.m-imagegrid > div > figure:first-child > div, +.m-imagegrid > div > figure:first-child > figcaption, +.m-imagegrid > div > figure:first-child > a > div, +.m-imagegrid > div > figure:first-child > a > figcaption { + border-left-width: 0; +} +.m-imagegrid > div > figure:last-child > div, +.m-imagegrid > div > figure:last-child > figcaption, +.m-imagegrid > div > figure:last-child > a > div, +.m-imagegrid > div > figure:last-child > a > figcaption { + border-right-width: 0; +} +.m-imagegrid > div > figure > figcaption, +.m-imagegrid > div > figure > a > figcaption { + color: transparent; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 0.75rem; +} +.m-imagegrid > div > figure > div::before, +.m-imagegrid > div > figure > figcaption::before, +.m-imagegrid > div > figure > a > div::before, +.m-imagegrid > div > figure > a > figcaption::before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: bottom; + width: 0; +} +.m-imagegrid > div > figure:hover > figcaption, +.m-imagegrid > div > figure:hover > a > figcaption { + background: linear-gradient(transparent 0%, transparent 75%, rgba(0, 0, 0, 0.85) 100%); + color: #ffffff; +} +.m-imagegrid > div > figure > img, +.m-imagegrid > div > figure > a > img { + width: 100%; + height: 100%; +} +.m-imagegrid > div::after { + display: block; + content: ' '; + clear: both; +} +@media screen and (max-width: 767px) { + .m-imagegrid > div > figure { + float: none; + width: 100% !important; + } + .m-imagegrid > div > figure > div, + .m-imagegrid > div > figure > figcaption, + .m-imagegrid > div > figure > a > div, + .m-imagegrid > div > figure > a > figcaption { + border-left-width: 0; + border-right-width: 0; + } +} +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-note, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-frame, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-block, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-imagegrid, +.m-container-inflatable > .m-row > [class*='m-col-'] > pre, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-code-figure, +.m-container-inflatable > .m-row > [class*='m-col-'] > .m-console-figure, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-note, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-frame, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-block, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-imagegrid, +.m-container-inflatable > .m-row > [class*='m-col-'] section > pre, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-code-figure, +.m-container-inflatable > .m-row > [class*='m-col-'] section > .m-console-figure, +.m-container-inflatable [class*='m-center-'] > .m-note, +.m-container-inflatable [class*='m-center-'] > .m-frame, +.m-container-inflatable [class*='m-center-'] > .m-block, +.m-container-inflatable [class*='m-center-'] > .m-imagegrid, +.m-container-inflatable [class*='m-center-'] > pre, +.m-container-inflatable [class*='m-center-'] > .m-code-figure, +.m-container-inflatable [class*='m-center-'] > .m-console-figure, +.m-container-inflatable [class*='m-left-'] > .m-note, +.m-container-inflatable [class*='m-left-'] > .m-frame, +.m-container-inflatable [class*='m-left-'] > .m-block, +.m-container-inflatable [class*='m-left-'] > .m-imagegrid, +.m-container-inflatable [class*='m-left-'] > pre, +.m-container-inflatable [class*='m-left-'] > .m-code-figure, +.m-container-inflatable [class*='m-left-'] > .m-console-figure, +.m-container-inflatable [class*='m-right-'] > .m-note, +.m-container-inflatable [class*='m-right-'] > .m-frame, +.m-container-inflatable [class*='m-right-'] > .m-block, +.m-container-inflatable [class*='m-right-'] > .m-imagegrid, +.m-container-inflatable [class*='m-right-'] > pre, +.m-container-inflatable [class*='m-right-'] > .m-code-figure, +.m-container-inflatable [class*='m-right-'] > .m-console-figure, +.m-container-inflatable .m-container-inflate > .m-note, +.m-container-inflatable .m-container-inflate > .m-frame, +.m-container-inflatable .m-container-inflate > .m-block, +.m-container-inflatable .m-container-inflate > .m-imagegrid, +.m-container-inflatable .m-container-inflate > pre, +.m-container-inflatable .m-container-inflate > .m-code-figure, +.m-container-inflatable .m-container-inflate > .m-console-figure +{ + margin-left: -1rem; + margin-right: -1rem; +} +@media screen and (min-width: 576px) { + .m-container-inflatable .m-center-s > .m-note, + .m-container-inflatable .m-center-s > .m-frame, + .m-container-inflatable .m-center-s > .m-block, + .m-container-inflatable .m-center-s > .m-imagegrid, + .m-container-inflatable .m-center-s > pre, + .m-container-inflatable .m-center-s > .m-code-figure, + .m-container-inflatable .m-center-s > .m-console-figure { + margin-left: -1rem; + margin-right: -1rem; + } + .m-container-inflatable .m-left-s > .m-note, + .m-container-inflatable .m-left-s > .m-frame, + .m-container-inflatable .m-left-s > .m-block, + .m-container-inflatable .m-left-s > .m-imagegrid, + .m-container-inflatable .m-left-s > pre, + .m-container-inflatable .m-left-s > .m-code-figure, + .m-container-inflatable .m-left-s > .m-console-figure { + margin-left: -1rem; + margin-right: 0; + } + .m-container-inflatable .m-right-s > .m-note, + .m-container-inflatable .m-right-s > .m-frame, + .m-container-inflatable .m-right-s > .m-block, + .m-container-inflatable .m-right-s > .m-imagegrid, + .m-container-inflatable .m-right-s > pre, + .m-container-inflatable .m-right-s > .m-code-figure, + .m-container-inflatable .m-right-s > .m-console-figure { + margin-left: 0; + margin-right: -1rem; + } + .m-container-inflatable > .m-row > .m-col-s-10 > .m-imagegrid.m-container-inflate, + .m-container-inflatable > .m-row > .m-col-s-10 section > .m-imagegrid.m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } +} +@media screen and (min-width: 768px) { + .m-container-inflatable .m-center-m > .m-note, + .m-container-inflatable .m-center-m > .m-frame, + .m-container-inflatable .m-center-m > .m-block, + .m-container-inflatable .m-center-m > .m-imagegrid, + .m-container-inflatable .m-center-m > pre, + .m-container-inflatable .m-center-m > .m-code-figure, + .m-container-inflatable .m-center-m > .m-console-figure { + margin-left: -1rem; + margin-right: -1rem; + } + .m-container-inflatable .m-left-m > .m-note, + .m-container-inflatable .m-left-m > .m-frame, + .m-container-inflatable .m-left-m > .m-block, + .m-container-inflatable .m-left-m > .m-imagegrid, + .m-container-inflatable .m-left-m > pre, + .m-container-inflatable .m-left-m > .m-code-figure, + .m-container-inflatable .m-left-m > .m-console-figure { + margin-left: -1rem; + margin-right: 0; + } + .m-container-inflatable .m-right-m > .m-note, + .m-container-inflatable .m-right-m > .m-frame, + .m-container-inflatable .m-right-m > .m-block, + .m-container-inflatable .m-right-m > .m-imagegrid, + .m-container-inflatable .m-right-m > pre, + .m-container-inflatable .m-right-m > .m-code-figure, + .m-container-inflatable .m-right-m > .m-console-figure { + margin-left: 0; + margin-right: -1rem; + } + .m-container-inflatable > .m-row > .m-col-m-10 > .m-imagegrid.m-container-inflate, + .m-container-inflatable > .m-row > .m-col-m-10 section > .m-imagegrid.m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } +} +@media screen and (min-width: 992px) { + .m-container-inflatable .m-center-l > .m-note, + .m-container-inflatable .m-center-l > .m-frame, + .m-container-inflatable .m-center-l > .m-block, + .m-container-inflatable .m-center-l > .m-imagegrid, + .m-container-inflatable .m-center-l > pre, + .m-container-inflatable .m-center-l > .m-code-figure, + .m-container-inflatable .m-center-l > .m-console-figure { + margin-left: -1rem; + margin-right: -1rem; + } + .m-container-inflatable .m-left-l > .m-note, + .m-container-inflatable .m-left-l > .m-frame, + .m-container-inflatable .m-left-l > .m-block, + .m-container-inflatable .m-left-l > .m-imagegrid, + .m-container-inflatable .m-left-l > pre, + .m-container-inflatable .m-left-l > .m-code-figure, + .m-container-inflatable .m-left-l > .m-console-figure { + margin-left: -1rem; + margin-right: 0; + } + .m-container-inflatable .m-right-l > .m-note, + .m-container-inflatable .m-right-l > .m-frame, + .m-container-inflatable .m-right-l > .m-block, + .m-container-inflatable .m-right-l > .m-imagegrid, + .m-container-inflatable .m-right-l > pre, + .m-container-inflatable .m-right-l > .m-code-figure, + .m-container-inflatable .m-right-l > .m-console-figure { + margin-left: 0; + margin-right: -1rem; + } + .m-container-inflatable > .m-row > .m-col-l-10 > .m-imagegrid.m-container-inflate, + .m-container-inflatable > .m-row > .m-col-l-10 section > .m-imagegrid.m-container-inflate { + margin-left: -10%; + margin-right: -10%; + } +} +pre.m-code span.hll { + margin-left: -1.0rem; + margin-right: -1.0rem; + padding-left: 1.0rem; +} +.m-code.m-inverted > span, .m-console.m-inverted > span { + opacity: 0.3333; +} +.m-code.m-inverted > span.hll, .m-console.m-inverted > span.hll { + opacity: 1; + background-color: transparent; + border-color: transparent; +} +.m-code.m-inverted { color: rgba(230, 230, 230, 0.33); } +.m-console.m-inverted { color: rgba(230, 230, 230, 0.33); } +.m-code.m-inverted > span.hll { color: #e6e6e6; } +.m-cosole.m-inverted > span.hll { color: #e6e6e6; } +.m-code-color { + display: inline-block; + width: 0.75rem; + height: 0.75rem; + vertical-align: -0.05rem; + margin-left: 0.2rem; + margin-right: 0.1rem; + border-radius: 0.1rem; +} +div.m-math { + overflow-x: auto; + overflow-y: hidden; +} +div.m-math svg { + margin-left: auto; + margin-right: auto; + display: block; +} +div.m-button a svg.m-math { fill: #22272e; } +div.m-button.m-flat a svg.m-math { fill: #dcdcdc; } +div.m-button.m-flat a:hover svg.m-math, div.m-button.m-default a:focus svg.m-math, +div.m-button.m-default a:active svg.m-math { + fill: #a5c9ea; +} +.m-graph { font-size: 16px; } +div.m-plot svg, div.m-graph svg { + max-width: 100%; + margin-left: auto; + margin-right: auto; + display: block; +} +div.m-plot .m-background { fill: #34424d; } +div.m-plot svg .m-label { font-size: 11px; } +div.m-plot svg .m-title { font-size: 13px; } +div.m-plot svg .m-label, div.m-plot svg .m-title { fill: #dcdcdc; } +div.m-plot svg .m-line { + stroke: #dcdcdc; + stroke-width: 0.8; +} +div.m-plot svg .m-error { + stroke: #ffffff; + stroke-width: 1.5; +} +div.m-plot svg .m-label.m-dim { fill: #747474; } +.m-graph g.m-edge path, .m-graph g.m-cluster polygon, +.m-graph g.m-node.m-flat ellipse, +.m-graph g.m-node.m-flat polygon { + fill: none; +} +.m-graph g.m-node:not(.m-flat) text { + fill: #22272e; +} +figure.m-figure > svg.m-math:first-child, +figure.m-figure > svg.m-graph:first-child { + padding: 1rem; + box-sizing: content-box; +} +figure.m-figure:not(.m-flat) > svg.m-math:first-child, +figure.m-figure:not(.m-flat) > svg.m-graph:first-child { + background-color: #405363; +} +.m-block.m-default { border-left-color: #405363; } +.m-block.m-default h3, .m-block.m-default h4, .m-block.m-default h5, .m-block.m-default h6, +.m-text.m-default, .m-label.m-flat.m-default { + color: #dcdcdc; +} +.m-block.m-default h3 a, .m-block.m-default h4 a, .m-block.m-default h5 a, .m-block.m-default h6 a { + color: #5b9dd9; +} +.m-block.m-primary { border-left-color: #a5c9ea; } +.m-block.m-primary h3, .m-block.m-primary h4, .m-block.m-primary h5, .m-block.m-primary h6, +.m-block.m-primary h3 a, .m-block.m-primary h4 a, .m-block.m-primary h5 a, .m-block.m-primary h6 a, +.m-text.m-primary, .m-label.m-flat.m-primary { + color: #a5c9ea; +} +.m-block.m-success { border-left-color: #3bd267; } +.m-block.m-success h3, .m-block.m-success h4, .m-block.m-success h5, .m-block.m-success h6, +.m-block.m-success h3 a, .m-block.m-success h4 a, .m-block.m-success h5 a, .m-block.m-success h6 a, +.m-text.m-success, .m-label.m-flat.m-success { + color: #3bd267; +} +.m-block.m-warning { border-left-color: #c7cf2f; } +.m-block.m-warning h3, .m-block.m-warning h4, .m-block.m-warning h5, .m-block.m-warning h6, +.m-block.m-warning h3 a, .m-block.m-warning h4 a, .m-block.m-warning h5 a, .m-block.m-warning h6 a, +.m-text.m-warning, .m-label.m-flat.m-warning { + color: #c7cf2f; +} +.m-block.m-danger { border-left-color: #cd3431; } +.m-block.m-danger h3, .m-block.m-danger h4, .m-block.m-danger h5, .m-block.m-danger h6, +.m-block.m-danger h3 a, .m-block.m-danger h4 a, .m-block.m-danger h5 a, .m-block.m-danger h6 a, +.m-text.m-danger, .m-label.m-flat.m-danger { + color: #cd3431; +} +.m-block.m-info { border-left-color: #2f83cc; } +.m-block.m-info h3, .m-block.m-info h4, .m-block.m-info h5, .m-block.m-info h6, +.m-block.m-info h3 a, .m-block.m-info h4 a, .m-block.m-info h5 a, .m-block.m-info h6 a, +.m-text.m-info, .m-label.m-flat.m-info { + color: #2f83cc; +} +.m-block.m-dim { border-left-color: #747474; } +.m-block.m-dim, .m-text.m-dim, .m-label.m-flat.m-dim { + color: #747474; +} +.m-block.m-dim a, .m-text.m-dim a { color: #acacac; } +.m-block.m-dim a:hover, .m-block.m-dim a:focus, .m-block.m-dim a:active, +.m-text.m-dim a:hover, .m-text.m-dim a:focus, .m-text.m-dim a:active { + color: #747474; +} +.m-block.m-flat { border-color: transparent; } +.m-block.m-flat h3, .m-block.m-flat h4, .m-block.m-flat h5, .m-block.m-flat h6 { + color: #dcdcdc; +} +.m-block.m-default h3 a:hover, .m-block.m-default h3 a:focus, .m-block.m-default h3 a:active, +.m-block.m-default h4 a:hover, .m-block.m-default h4 a:focus, .m-block.m-default h4 a:active, +.m-block.m-default h5 a:hover, .m-block.m-default h5 a:focus, .m-block.m-default h5 a:active, +.m-block.m-default h6 a:hover, .m-block.m-default h6 a:focus, .m-block.m-default h6 a:active { + color: #a5c9ea; +} +.m-block.m-primary h3 a:hover, .m-block.m-primary h3 a:focus, .m-block.m-primary h3 a:active, +.m-block.m-primary h4 a:hover, .m-block.m-primary h4 a:focus, .m-block.m-primary h4 a:active, +.m-block.m-primary h5 a:hover, .m-block.m-primary h5 a:focus, .m-block.m-primary h5 a:active, +.m-block.m-primary h6 a:hover, .m-block.m-primary h6 a:focus, .m-block.m-primary h6 a:active { + color: #dcdcdc; +} +.m-block.m-success h3 a:hover, .m-block.m-success h3 a:focus, .m-block.m-success h3 a:active, +.m-block.m-success h4 a:hover, .m-block.m-success h4 a:focus, .m-block.m-success h4 a:active, +.m-block.m-success h5 a:hover, .m-block.m-success h5 a:focus, .m-block.m-success h5 a:active, +.m-block.m-success h6 a:hover, .m-block.m-success h6 a:focus, .m-block.m-success h6 a:active { + color: #acecbe; +} +.m-block.m-warning h3 a:hover, .m-block.m-warning h3 a:focus, .m-block.m-warning h3 a:active, +.m-block.m-warning h4 a:hover, .m-block.m-warning h4 a:focus, .m-block.m-warning h4 a:active, +.m-block.m-warning h5 a:hover, .m-block.m-warning h5 a:focus, .m-block.m-warning h5 a:active, +.m-block.m-warning h6 a:hover, .m-block.m-warning h6 a:focus, .m-block.m-warning h6 a:active { + color: #e9ecae; +} +.m-block.m-danger h3 a:hover, .m-block.m-danger h3 a:focus, .m-block.m-danger h3 a:active, +.m-block.m-danger h4 a:hover, .m-block.m-danger h4 a:focus, .m-block.m-danger h4 a:active, +.m-block.m-danger h5 a:hover, .m-block.m-danger h5 a:focus, .m-block.m-danger h5 a:active, +.m-block.m-danger h6 a:hover, .m-block.m-danger h6 a:focus, .m-block.m-danger h6 a:active { + color: #ff9391; +} +.m-block.m-info h3 a:hover, .m-block.m-info h3 a:focus, .m-block.m-info h3 a:active, +.m-block.m-info h4 a:hover, .m-block.m-info h4 a:focus, .m-block.m-info h4 a:active, +.m-block.m-info h5 a:hover, .m-block.m-info h5 a:focus, .m-block.m-info h5 a:active, +.m-block.m-info h6 a:hover, .m-block.m-info h6 a:focus, .m-block.m-info h6 a:active { + color: #5297d7; +} +div.m-button a, .m-label { color: #22272e; } +div.m-button.m-flat a { color: #dcdcdc; } +div.m-button.m-flat a:hover, div.m-button.m-default a:focus, div.m-button.m-default a:active { + color: #a5c9ea; +} +div.m-button.m-default a, .m-label:not(.m-flat).m-default { background-color: #dcdcdc; } +div.m-button.m-primary a, .m-label:not(.m-flat).m-primary { background-color: #a5c9ea; } +div.m-button.m-success a, .m-label:not(.m-flat).m-success { background-color: #3bd267; } +div.m-button.m-warning a, .m-label:not(.m-flat).m-warning { background-color: #c7cf2f; } +div.m-button.m-danger a, .m-label:not(.m-flat).m-danger { background-color: #cd3431; } +div.m-button.m-info a, .m-label:not(.m-flat).m-info { background-color: #2f83cc; } +div.m-button.m-dim a, .m-label:not(.m-flat).m-dim { background-color: #747474; } +div.m-button.m-default a:hover, div.m-button.m-default a:focus, div.m-button.m-default a:active { + background-color: #a5c9ea; +} +div.m-button.m-primary a:hover, div.m-button.m-primary a:focus, div.m-button.m-primary a:active { + background-color: #dcdcdc; +} +div.m-button.m-success a:hover, div.m-button.m-success a:focus, div.m-button.m-success a:active { + background-color: #acecbe; +} +div.m-button.m-warning a:hover, div.m-button.m-warning a:focus, div.m-button.m-warning a:active { + background-color: #e9ecae; +} +div.m-button.m-danger a:hover, div.m-button.m-danger a:focus, div.m-button.m-danger a:active { + background-color: #ff9391; +} +div.m-button.m-info a:hover, div.m-button.m-info a:focus, div.m-button.m-info a:active { + background-color: #5297d7; +} +div.m-button.m-dim a:hover, div.m-button.m-dim a:focus, div.m-button.m-dim a:active { + background-color: #acacac; +} +.m-note.m-default { background-color: #34424d; } +.m-note.m-default, +table.m-table tr.m-default td, table.m-table td.m-default, +table.m-table tr.m-default th, table.m-table th.m-default { + color: #dcdcdc; +} +.m-note.m-default a:hover, +table.m-table tr.m-default td a:hover, table.m-table td.m-default a:hover, +table.m-table tr.m-default th a:hover, table.m-table th.m-default a:hover, +.m-note.m-default a:focus, +table.m-table tr.m-default td a:focus, table.m-table td.m-default a:focus, +table.m-table tr.m-default th a:focus, table.m-table th.m-default a:focus, +.m-note.m-default a:active, +table.m-table tr.m-default td a:active, table.m-table td.m-default a:active, +table.m-table tr.m-default th a:active, table.m-table th.m-default a:active { + color: #a5c9ea; +} +.m-note.m-primary a, +table.m-table tr.m-primary td a, table.m-table td.m-primary a, +table.m-table tr.m-primary th a, table.m-table th.m-primary a { + color: #5b9dd9; +} +.m-note.m-primary, +table.m-table tr.m-primary td, table.m-table td.m-primary, +table.m-table tr.m-primary th, table.m-table th.m-primary { + background-color: #a5c2db; + color: #2f363f; +} +.m-note.m-primary a, +table.m-table tr.m-primary td a, table.m-table td.m-primary a, +table.m-table tr.m-primary th a, table.m-table th.m-primary a { + color: #2a75b6; +} +.m-note.m-primary a:hover, +table.m-table tr.m-primary td a:hover, table.m-table td.m-primary a:hover, +table.m-table tr.m-primary th a:hover, table.m-table th.m-primary a:hover, +.m-note.m-primary a:focus, +table.m-table tr.m-primary td a:focus, table.m-table td.m-primary a:focus, +table.m-table tr.m-primary th a:focus, table.m-table th.m-primary a:focus, +.m-note.m-primary a:active, +table.m-table tr.m-primary td a:active, table.m-table td.m-primary a:active, +table.m-table tr.m-primary th a:active, table.m-table th.m-primary a:active { + color: #2f363f; +} +.m-note.m-success, +table.m-table tr.m-success td, table.m-table td.m-success, +table.m-table tr.m-success th, table.m-table th.m-success { + background-color: #2a703f; + color: #acecbe; +} +.m-note.m-success a, +table.m-table tr.m-success td a, table.m-table td.m-success a, +table.m-table tr.m-success th a, table.m-table th.m-success a { + color: #3bd267; +} +.m-note.m-success a:hover, +table.m-table tr.m-success td a:hover, table.m-table td.m-success a:hover, +table.m-table tr.m-success th a:hover, table.m-table th.m-success a:hover, +.m-note.m-success a:focus, +table.m-table tr.m-success td a:focus, table.m-table td.m-success a:focus, +table.m-table tr.m-success th a:focus, table.m-table th.m-success a:focus, +.m-note.m-success a:active, +table.m-table tr.m-success td a:active, table.m-table td.m-success a:active, +table.m-table tr.m-success th a:active, table.m-table th.m-success a:active { + color: #acecbe; +} +.m-note.m-warning, table.m-table tr.m-warning td, table.m-table td.m-warning, + table.m-table tr.m-warning th, table.m-table th.m-warning { + background-color: #6d702a; + color: #e9ecae; +} +.m-note.m-warning a, table.m-table tr.m-warning td a, table.m-table td.m-warning a, + table.m-table tr.m-warning th a, table.m-table th.m-warning a { + color: #b8bf2b; +} +.m-note.m-warning a:hover, +table.m-table tr.m-warning td a:hover, table.m-table td.m-warning a:hover, +table.m-table tr.m-warning th a:hover, table.m-table th.m-warning a:hover, +.m-note.m-warning a:focus, +table.m-table tr.m-warning td a:focus, table.m-table td.m-warning a:focus, +table.m-table tr.m-warning th a:focus, table.m-table th.m-warning a:focus, +.m-note.m-warning a:active, +table.m-table tr.m-warning td a:active, table.m-table td.m-warning a:active, +table.m-table tr.m-warning th a:active, table.m-table th.m-warning a:active { + color: #e9ecae; +} +.m-note.m-danger, +table.m-table tr.m-danger td, table.m-table td.m-danger, +table.m-table tr.m-danger th, table.m-table th.m-danger { + background-color: #702b2a; + color: #ff9391; +} +.m-note.m-danger a, +table.m-table tr.m-danger td a, table.m-table td.m-danger a, +table.m-table tr.m-danger th a, table.m-table th.m-danger a { + color: #d85c59; +} +.m-note.m-danger a:hover, +table.m-table tr.m-danger td a:hover, table.m-table td.m-danger a:hover, +table.m-table tr.m-danger th a:hover, table.m-table th.m-danger a:hover, +.m-note.m-danger a:focus, +table.m-table tr.m-danger td a:focus, table.m-table td.m-danger a:focus, +table.m-table tr.m-danger th a:focus, table.m-table th.m-danger a:focus, +.m-note.m-danger a:active, +table.m-table tr.m-danger td a:active, table.m-table td.m-danger a:active, +table.m-table tr.m-danger th a:active, table.m-table th.m-danger a:active { + color: #ff9391; +} +.m-note.m-info, +table.m-table tr.m-info td, table.m-table td.m-info, +table.m-table tr.m-info th, table.m-table th.m-info { + background-color: #2a4f70; + color: #a5caeb; +} +.m-note.m-info a, +table.m-table tr.m-info td a, table.m-table td.m-info a, +table.m-table tr.m-info th a, table.m-table th.m-info a { + color: #5297d7; +} +.m-note.m-info a:hover, +table.m-table tr.m-info td a:hover, table.m-table td.m-info a:hover, +table.m-table tr.m-info th a:hover, table.m-table th.m-info a:hover, +.m-note.m-info a:focus, +table.m-table tr.m-info td a:focus, table.m-table td.m-info a:focus, +table.m-table tr.m-info th a:focus, table.m-table th.m-info a:focus, +.m-note.m-info a:active, +table.m-table tr.m-info td a:active, table.m-table td.m-info a:active, +table.m-table tr.m-info th a:active, table.m-table th.m-info a:active { + color: #a5caeb; +} +.m-note.m-dim, +table.m-table tr.m-dim td, table.m-table td.m-dim, +table.m-table tr.m-dim th, table.m-table th.m-dim { + background-color: #2d3236; + color: #747474; +} +.m-note.m-dim a, +table.m-table tr.m-dim td a, table.m-table td.m-dim a, +table.m-table tr.m-dim th a, table.m-table th.m-dim a { + color: #acacac; +} +.m-note.m-dim a:hover, +table.m-table tr.m-dim td a:hover, table.m-table td.m-dim a:hover, +table.m-table tr.m-dim th a:hover, table.m-table th.m-dim a:hover, +.m-note.m-dim a:focus, +table.m-table tr.m-dim td a:focus, table.m-table td.m-dim a:focus, +table.m-table tr.m-dim th a:focus, table.m-table th.m-dim a:focus, +.m-note.m-dim a:active, +table.m-table tr.m-dim td a:active, table.m-table td.m-dim a:active, +table.m-table tr.m-dim th a:active, table.m-table th.m-dim a:active { + color: #747474; +} +figure.m-figure.m-default::before { border-color: #34424d; } +figure.m-figure.m-default figcaption { color: #dcdcdc; } +figure.m-figure.m-primary::before { border-color: #a5c2db; } +figure.m-figure.m-primary figcaption { color: #a5c9ea; } +figure.m-figure.m-primary figcaption .m-figure-description { color: #dcdcdc; } +figure.m-figure.m-success::before { border-color: #2a703f; } +figure.m-figure.m-success figcaption { color: #3bd267; } +figure.m-figure.m-success figcaption .m-figure-description { color: #dcdcdc; } +figure.m-figure.m-warning:::before { border-color: #6d702a; } +figure.m-figure.m-warning figcaption { color: #c7cf2f; } +figure.m-figure.m-warning figcaption .m-figure-description { color: #dcdcdc; } +figure.m-figure.m-danger:::before { border-color: #702b2a; } +figure.m-figure.m-danger figcaption { color: #cd3431; } +figure.m-figure.m-danger figcaption .m-figure-description { color: #dcdcdc; } +figure.m-figure.m-info:::before { border-color: #2a4f70; } +figure.m-figure.m-info figcaption { color: #2f83cc; } +figure.m-figure.m-info figcaption .m-figure-description { color: #dcdcdc; } +figure.m-figure.m-dim:::before { border-color: #2d3236; } +figure.m-figure.m-dim { color: #747474; } +figure.m-figure.m-dim a { color: #acacac; } +figure.m-figure.m-dim a:hover, figure.m-figure.m-dim a:focus, figure.m-figure.m-dim a:active { + color: #747474; +} +.m-math { fill: #dcdcdc; } +.m-math.m-default, .m-math g.m-default, .m-math rect.m-default, +div.m-plot svg .m-bar.m-default, +.m-graph g.m-edge polygon, +.m-graph g.m-node:not(.m-flat) ellipse, +.m-graph g.m-node:not(.m-flat) polygon, +.m-graph g.m-edge text, +.m-graph g.m-node.m-flat text, +.m-graph g.m-cluster text, +.m-graph.m-default g.m-edge polygon, +.m-graph.m-default g.m-node:not(.m-flat) ellipse, +.m-graph.m-default g.m-node:not(.m-flat) polygon, +.m-graph.m-default g.m-edge text, +.m-graph.m-default g.m-node.m-flat text, +.m-graph.m-default g.m-cluster text { + fill: #dcdcdc; +} +.m-graph g.m-edge polygon, +.m-graph g.m-edge path, +.m-graph g.m-node ellipse, +.m-graph g.m-node polygon, +.m-graph g.m-node polyline, +.m-graph g.m-cluster polygon, +.m-graph.m-default g.m-edge polygon, +.m-graph.m-default g.m-edge path, +.m-graph.m-default g.m-node ellipse, +.m-graph.m-default g.m-node polygon, +.m-graph.m-default g.m-node polyline, +.m-graph.m-default g.m-cluster polygon { + stroke: #dcdcdc; +} +.m-math.m-primary, .m-math g.m-primary, .m-math rect.m-primary, +div.m-plot svg .m-bar.m-primary, +.m-graph.m-primary g.m-edge polygon, +.m-graph.m-primary g.m-node:not(.m-flat) ellipse, +.m-graph.m-primary g.m-node:not(.m-flat) polygon, +.m-graph.m-primary g.m-edge text, +.m-graph.m-primary g.m-node.m-flat text, +.m-graph.m-primary g.m-cluster text { + fill: #a5c9ea; +} +.m-graph.m-primary g.m-edge polygon, +.m-graph.m-primary g.m-edge path, +.m-graph.m-primary g.m-node ellipse, +.m-graph.m-primary g.m-node polygon, +.m-graph.m-primary g.m-node polyline, +.m-graph.m-primary g.m-cluster polygon { + stroke: #a5c9ea; +} +.m-math.m-success, .m-math g.m-success, .m-math rect.m-success, +div.m-plot svg .m-bar.m-success, +.m-graph.m-success g.m-edge polygon, +.m-graph.m-success g.m-node:not(.m-flat) ellipse, +.m-graph.m-success g.m-node:not(.m-flat) polygon, +.m-graph.m-success g.m-edge text, +.m-graph.m-success g.m-node.m-flat text, +.m-graph.m-success g.m-cluster text { + fill: #3bd267; +} +.m-graph.m-success g.m-edge polygon, +.m-graph.m-success g.m-edge path, +.m-graph.m-success g.m-node ellipse, +.m-graph.m-success g.m-node polygon, +.m-graph.m-success g.m-node polyline, +.m-graph.m-success g.m-cluster polygon { + stroke: #3bd267; +} +.m-math.m-warning, .m-math g.m-warning, .m-math rect.m-warning, +div.m-plot svg .m-bar.m-warning, +.m-graph.m-warning g.m-edge polygon, +.m-graph.m-warning g.m-node:not(.m-flat) ellipse, +.m-graph.m-warning g.m-node:not(.m-flat) polygon, +.m-graph.m-warning g.m-edge text, +.m-graph.m-warning g.m-node.m-flat text, +.m-graph.m-warning g.m-cluster text { + fill: #c7cf2f; +} +.m-graph.m-warning g.m-edge polygon, +.m-graph.m-warning g.m-edge path, +.m-graph.m-warning g.m-node ellipse, +.m-graph.m-warning g.m-node polygon, +.m-graph.m-warning g.m-node polyline, +.m-graph.m-warning g.m-cluster polygon { + stroke: #c7cf2f; +} +.m-math.m-danger, .m-math g.m-danger, .m-math rect.m-danger, +div.m-plot svg .m-bar.m-danger, +.m-graph.m-danger g.m-edge polygon, +.m-graph.m-danger g.m-node:not(.m-flat) ellipse, +.m-graph.m-danger g.m-node:not(.m-flat) polygon, +.m-graph.m-danger g.m-edge text, +.m-graph.m-danger g.m-node.m-flat text, +.m-graph.m-danger g.m-cluster text { + fill: #cd3431; +} +.m-graph.m-danger g.m-edge polygon, +.m-graph.m-danger g.m-edge path, +.m-graph.m-danger g.m-node ellipse, +.m-graph.m-danger g.m-node polygon, +.m-graph.m-danger g.m-node polyline, +.m-graph.m-danger g.m-cluster polygon { + stroke: #cd3431; +} +.m-math.m-info, .m-math g.m-info, .m-math rect.m-info, +div.m-plot svg .m-bar.m-info, +.m-graph.m-info g.m-edge polygon, +.m-graph.m-info g.m-node:not(.m-flat) ellipse, +.m-graph.m-info g.m-node:not(.m-flat) polygon, +.m-graph.m-info g.m-edge text, +.m-graph.m-info g.m-node.m-flat text, +.m-graph.m-info g.m-cluster text { + fill: #2f83cc; +} +.m-graph.m-info g.m-edge polygon, +.m-graph.m-info g.m-edge path, +.m-graph.m-info g.m-node ellipse, +.m-graph.m-info g.m-node polygon, +.m-graph.m-info g.m-node polyline, +.m-graph.m-info g.m-cluster polygon { + stroke: #2f83cc; +} +.m-math.m-dim, .m-math g.m-dim, .m-math rect.m-dim, +div.m-plot svg .m-bar.m-dim, +.m-graph.m-dim g.m-edge polygon, +.m-graph.m-dim g.m-node:not(.m-flat) ellipse, +.m-graph.m-dim g.m-node:not(.m-flat) polygon, +.m-graph.m-dim g.m-edge text, +.m-graph.m-dim g.m-node.m-flat text, +.m-graph.m-dim g.m-cluster text { + fill: #747474; +} +.m-graph.m-dim g.m-edge polygon, +.m-graph.m-dim g.m-edge path, +.m-graph.m-dim g.m-node ellipse, +.m-graph.m-dim g.m-node polygon, +.m-graph.m-dim g.m-node polyline, +.m-graph.m-dim g.m-cluster polygon { + stroke: #747474; +} +.m-graph g.m-edge.m-default polygon, +.m-graph g.m-node.m-default:not(.m-flat) ellipse, +.m-graph g.m-node.m-default:not(.m-flat) polygon, +.m-graph g.m-edge.m-default text, +.m-graph g.m-node.m-default.m-flat text, +.m-graph g.m-cluster.m-default text { + fill: #dcdcdc; +} +.m-graph g.m-edge.m-default polygon, +.m-graph g.m-edge.m-default path, +.m-graph g.m-node.m-default ellipse, +.m-graph g.m-node.m-default polygon, +.m-graph g.m-node.m-default polyline, +.m-graph g.m-cluster.m-default polygon { + stroke: #dcdcdc; +} +.m-graph g.m-edge.m-primary polygon, +.m-graph g.m-node.m-primary:not(.m-flat) ellipse, +.m-graph g.m-node.m-primary:not(.m-flat) polygon, +.m-graph g.m-edge.m-primary text, +.m-graph g.m-node.m-primary.m-flat text, +.m-graph g.m-cluster.m-primary text { + fill: #a5c9ea; +} +.m-graph g.m-edge.m-primary polygon, +.m-graph g.m-edge.m-primary path, +.m-graph g.m-node.m-primary ellipse, +.m-graph g.m-node.m-primary polygon, +.m-graph g.m-node.m-primary polyline, +.m-graph g.m-cluster.m-primary polygon { + stroke: #a5c9ea; +} +.m-graph g.m-edge.m-success polygon, +.m-graph g.m-node.m-success:not(.m-flat) ellipse, +.m-graph g.m-node.m-success:not(.m-flat) polygon, +.m-graph g.m-edge.m-success text, +.m-graph g.m-node.m-success.m-flat text, +.m-graph g.m-cluster.m-success text { + fill: #3bd267; +} +.m-graph g.m-edge.m-success polygon, +.m-graph g.m-edge.m-success path, +.m-graph g.m-node.m-success ellipse, +.m-graph g.m-node.m-success polygon, +.m-graph g.m-node.m-success polyline, +.m-graph g.m-cluster.m-success polygon { + stroke: #3bd267; +} +.m-graph g.m-edge.m-warning polygon, +.m-graph g.m-node.m-warning:not(.m-flat) ellipse, +.m-graph g.m-node.m-warning:not(.m-flat) polygon, +.m-graph g.m-edge.m-warning text, +.m-graph g.m-node.m-warning.m-flat text, +.m-graph g.m-cluster.m-warning text { + fill: #c7cf2f; +} +.m-graph g.m-edge.m-warning polygon, +.m-graph g.m-edge.m-warning path, +.m-graph g.m-node.m-warning ellipse, +.m-graph g.m-node.m-warning polygon, +.m-graph g.m-node.m-warning polyline, +.m-graph g.m-cluster.m-warning polygon { + stroke: #c7cf2f; +} +.m-graph g.m-edge.m-danger polygon, +.m-graph g.m-node.m-danger:not(.m-flat) ellipse, +.m-graph g.m-node.m-danger:not(.m-flat) polygon, +.m-graph g.m-edge.m-danger text, +.m-graph g.m-node.m-danger.m-flat text, +.m-graph g.m-cluster.m-danger text { + fill: #cd3431; +} +.m-graph g.m-edge.m-danger polygon, +.m-graph g.m-edge.m-danger path, +.m-graph g.m-node.m-danger ellipse, +.m-graph g.m-node.m-danger polygon, +.m-graph g.m-node.m-danger polyline, +.m-graph g.m-cluster.m-danger polygon { + stroke: #cd3431; +} +.m-graph g.m-edge.m-info polygon, +.m-graph g.m-node.m-info:not(.m-flat) ellipse, +.m-graph g.m-node.m-info:not(.m-flat) polygon, +.m-graph g.m-edge.m-info text, +.m-graph g.m-node.m-info.m-flat text, +.m-graph g.m-cluster.m-info text { + fill: #2f83cc; +} +.m-graph g.m-edge.m-info polygon, +.m-graph g.m-edge.m-info path, +.m-graph g.m-node.m-info ellipse, +.m-graph g.m-node.m-info polygon, +.m-graph g.m-node.m-info polyline, +.m-graph g.m-cluster.m-info polygon { + stroke: #2f83cc; +} +.m-graph g.m-edge.m-dim polygon, +.m-graph g.m-node.m-dim:not(.m-flat) ellipse, +.m-graph g.m-node.m-dim:not(.m-flat) polygon, +.m-graph g.m-edge.m-dim text, +.m-graph g.m-node.m-dim.m-flat text, +.m-graph g.m-cluster.m-dim text { + fill: #747474; +} +.m-graph g.m-edge.m-dim polygon, +.m-graph g.m-edge.m-dim path, +.m-graph g.m-node.m-dim ellipse, +.m-graph g.m-node.m-dim polygon, +.m-graph g.m-node.m-dim polyline, +.m-graph g.m-cluster.m-dim polygon { + stroke: #747474; +} +p, ul, ol, dl, blockquote, pre, .m-code-figure, .m-console-figure, hr, .m-note, +.m-frame, .m-block, div.m-button, div.m-scroll, table.m-table, div.m-image, +img.m-image, svg.m-image, figure.m-figure, .m-imagegrid, div.m-math, +div.m-graph, div.m-plot { + margin-bottom: 1rem; +} +p:last-child, p.m-nopadb, ul:last-child, ul.m-nopadb, +ol:last-child, ol.m-nopadb, dl:last-child, dl.m-nopadb, +blockquote:last-child, blockquote.m-nopadb, pre:last-child, pre.m-nopadb, +.m-code-figure:last-child, .m-code-figure.m-nopadb, +.m-console-figure:last-child, .m-console-figure.m-nopadb, +hr:last-child, hr.m-nopadb, .m-note:last-child, .m-note.m-nopadb, +.m-frame:last-child, .m-frame.m-nopadb, .m-block:last-child, .m-block.m-nopadb, +div.m-button:last-child, div.m-button.m-nopadb, +div.m-scroll:last-child, div.m-scroll.m-nopadb, +table.m-table:last-child, table.m-table.m-nopadb, +img.m-image:last-child, img.m-image.m-nopadb, +svg.m-image:last-child, svg.m-image.m-nopadb, +div.m-image:last-child, div.m-image.m-nopadb, +figure.m-figure:last-child, figure.m-figure.m-nopadb, +.m-imagegrid:last-child, .m-imagegrid.m-nopadb, +div.m-math:last-child, div.m-math.m-nopadb, +div.m-graph:last-child, div.m-graph.m-nopadb, +div.m-plot:last-child, div.m-plot.m-nopadb { + margin-bottom: 0; +} +li > p:last-child, li > blockquote:last-child, li > pre:last-child, +li > .m-code-figure:last-child, li > .m-console-figure:last-child, +li > .m-note:last-child, li > .m-frame:last-child, li > .m-block:last-child, +li > div.m-button:last-child, li > div.m-scroll:last-child, li > table.m-table:last-child, +li > img.m-image:last-child, li > svg.m-image:last-child, li > div.m-image:last-child, +li > figure.m-figure:last-child, li > div.m-math:last-child, +li > div.m-graph:last-child, li > div.m-plot:last-child { + margin-bottom: 1rem; +} +li:last-child > p:last-child, li:last-child > p.m-nopadb, +li:last-child > blockquote:last-child, li:last-child > blockquote.m-nopadb, +li:last-child > pre:last-child, li:last-child > pre.m-nopadb, +li:last-child > .m-code-figure:last-child, li:last-child > .m-code-figure.m-nopadb, +li:last-child > .m-console-figure:last-child, li:last-child > .m-console-figure.m-nopadb, +li:last-child > .m-note:last-child, li:last-child > .m-note.m-nopadb, +li:last-child > .m-frame:last-child, li:last-child > .m-frame.m-nopadb, +li:last-child > .m-block:last-child, li:last-child > .m-block.m-nopadb, +li:last-child > div.m-button:last-child, li:last-child > div.m-button.m-nopadb, +li:last-child > div.m-scroll:last-child, li:last-child > div.m-scroll.m-nopadb, +li:last-child > table.m-table:last-child, li:last-child > table.m-table.m-nopadb, +li:last-child > img.m-image:last-child, li:last-child > img.m-image.m-nopadb, +li:last-child > svg.m-image:last-child, li:last-child > svg.m-image.m-nopadb, +li:last-child > div.m-image:last-child, li:last-child > div.m-image.m-nopadb, +li:last-child > figure.m-figure:last-child, li:last-child > figure.m-figure.m-nopadb, +li:last-child > div.m-math:last-child, li:last-child > div.m-math.m-nopadb, +li:last-child > div.m-graph:last-child, li:last-child > div.m-graph.m-nopadb, +li:last-child > div.m-plot:last-child, li:last-child > div.m-plot.m-nopadb { + margin-bottom: 0; +} + +body > header > nav { + width: 100%; + background-color: #22272e; + min-height: 3rem; +} +body > header > nav.m-navbar-landing, +body > header > nav.m-navbar-cover { + background-color: transparent; + position: relative; +} +body > header > nav.m-navbar-landing { + opacity: 0.8; +} +body > header > nav.m-navbar-cover { + background-color: rgba(34, 39, 46, 0.25); + opacity: 1; +} +body > header > nav.m-navbar-landing:hover, +body > header > nav.m-navbar-cover:hover { + background-color: rgba(34, 39, 46, 0.75); + opacity: 1; +} +body> header > nav.m-navbar-landing:target, +body> header > nav.m-navbar-cover:target { + background-color: #22272e; + opacity: 1; +} +body > header > nav.m-navbar-landing #m-navbar-brand.m-navbar-brand-hidden { + visibility: hidden; +} +body > header > nav.m-navbar-landing:target #m-navbar-brand.m-navbar-brand-hidden { + visibility: visible; +} +body > header > nav { + margin-left: auto; + margin-right: auto; + color: #ffffff; +} +body > header > nav a { + text-decoration: none; + text-transform: none; + display: inline-block; + vertical-align: middle; + line-height: 2.75rem; + color: #ffffff; +} +body > header > nav #m-navbar-brand, body > header > nav a#m-navbar-show, body > header > nav a#m-navbar-hide { + font-weight: 600; + font-size: 1.125rem; + padding-left: 1rem; + padding-right: 1rem; +} +body > header > nav a#m-navbar-brand, body > header > nav #m-navbar-brand a { + text-transform: uppercase; +} +body > header > nav a#m-navbar-brand img, body > header > nav #m-navbar-brand a img { + width: 1.75rem; + height: 1.75rem; + vertical-align: -22.5%; + margin-right: 0.5rem; +} +body > header > nav #m-navbar-brand a { + padding-left: 0; + padding-right: 0; +} +body > header > nav #m-navbar-brand .m-thin { + font-weight: normal; +} +body > header > nav #m-navbar-brand .m-breadcrumb { + color: #747474; +} +body > header > nav a#m-navbar-show::before, body > header > nav a#m-navbar-hide::before { + content:'\2630'; +} +body > header > nav #m-navbar-collapse { + padding-bottom: 1rem; +} +body > header > nav #m-navbar-collapse li { + border-style: solid; + border-color: transparent; + border-width: 0 0 0 0.25rem; + margin-left: -1rem; +} +body > header > nav #m-navbar-collapse li a { + border-style: solid; + border-color: transparent; + line-height: 1.5rem; + margin-left: -0.25rem; + padding-left: 0.75rem; + border-width: 0 0 0 0.25rem; + width: 100%; +} +body > header > nav #m-navbar-collapse li a#m-navbar-current { + color: #5b9dd9; + border-color: #5b9dd9; +} +body > header > nav ol { + list-style-type: none; + margin: 0; +} +body > header > nav ol ol { + padding-left: 1.5rem; +} +body > header > nav .m-row > [class*='m-col-'] { + padding-top: 0; + padding-bottom: 0; +} +body > header > nav a:hover, body > header > nav a:focus, body > header > nav a:active { + color: #a5c9ea; +} +body > header > nav #m-navbar-collapse li:hover { + border-color: #a5c9ea; +} +body > header > nav #m-navbar-collapse li a:hover, +body > header > nav #m-navbar-collapse li a:focus, +body > header > nav #m-navbar-collapse li a:active { + border-color: #a5c9ea; + background-color: #292f37; +} +body > header > nav.m-navbar-landing #m-navbar-collapse li a:hover, +body > header > nav.m-navbar-cover #m-navbar-collapse li a:hover, +body > header > nav.m-navbar-landing #m-navbar-collapse li a:focus, +body > header > nav.m-navbar-cover #m-navbar-collapse li a:focus, +body > header > nav.m-navbar-landing #m-navbar-collapse li a:active, +body > header > nav.m-navbar-cover #m-navbar-collapse li a:active { + background-color: rgba(41, 47, 55, 0.5); +} +body > header > nav #m-navbar-hide { + display: none; +} +body > header > nav:target #m-navbar-collapse { + display: block; +} +body > header > nav:target #m-navbar-show { + display: none; +} +body > header > nav:target #m-navbar-hide { + display: inline-block; +} +@media screen and (min-width: 768px) { + body > header > nav #m-navbar-show, body > header > nav #m-navbar-hide, + body > header > nav:target #m-navbar-show, body > header > nav:target #m-navbar-hide { + display: none; + } + body > header > nav #m-navbar-collapse li a { + line-height: 2.75rem; + } + body > header > nav a, body > header > nav #m-navbar-collapse li a { + margin-left: 0; + padding-left: 1rem; + padding-right: 1rem; + white-space: nowrap; + } + body > header > nav #m-navbar-collapse { + padding-bottom: 0; + } + body > header > nav #m-navbar-collapse li ol { + background-color: #22272e; + } + body > header > nav #m-navbar-collapse ol ol li { + margin-left: 0; + padding-left: 0; + border-left-width: 0; + } + body > header > nav #m-navbar-collapse ol ol li a { + padding-left: 0.75rem; + } + body > header > nav #m-navbar-collapse > .m-row > ol > li { + margin-left: 0; + border-left-width: 0; + } + body > header > nav #m-navbar-collapse > .m-row > ol > li > a { + border-width: 0 0 0.25rem 0; + } + body > header > nav #m-navbar-collapse ol { + padding-left: 0; + padding-right: 0; + } + body > header > nav #m-navbar-collapse > .m-row > ol, body > header > nav #m-navbar-collapse > .m-row > ol > li { + float: left; + } + body > header > nav #m-navbar-collapse ol ol { + z-index: 99999; + position: absolute; + visibility: hidden; + } + body > header > nav #m-navbar-collapse li:hover ol { + visibility: visible; + } +} +body > footer { + width: 100%; +} +body > footer > nav { + padding-top: 1rem; + padding-bottom: 1rem; + font-size: 0.85rem; + text-align: center; + color: #c5c5c5; + background-color: #444e5c; +} +body > footer > nav h3, body > footer > nav h3 a { + text-transform: uppercase; + font-weight: normal; +} +body > footer > nav ul { + list-style-type: none; + padding: 0; + margin: 0; +} +body > footer > nav a { + text-decoration: none; + text-transform: none; + color: #ffffff; +} +body > footer > nav a:hover, body > footer > nav a:focus, body > footer > nav a:active { + color: #a5c9ea; +} +body > main { + padding-top: 1rem; + padding-bottom: 1rem; +} +article h1 { + font-size: 1.75rem; +} +article h1 .m-breadcrumb { + color: #747474; + font-weight: normal; +} +article h1 .m-breadcrumb a { + color: #a5c9ea; +} +article h1 .m-breadcrumb a:hover, article h1 a:focus, article h1 a:active { + color: #dcdcdc; +} +article > header h1 { + font-size: 2rem; + margin-bottom: 0.5rem; +} +article h1 a, article > header h1, article > header h1 a, +article section > h2, article section > h2 a, +article section > h3, article section > h3 a, +article section > h4, article section > h4 a, +article section > h5, article section > h5 a, +article section > h6, article section > h6 a { + color: #a5c9ea; +} +article h1 a:hover, article > header h1 a:hover, article > header h1 a:focus, article > header h1 a:active, +article section > h2 a:hover, article section > h2 a:focus, article section > h2 a:active, +article section > h3 a:hover, article section > h3 a:focus, article section > h3 a:active, +article section > h4 a:hover, article section > h4 a:focus, article section > h4 a:active, +article section > h5 a:hover, article section > h5 a:focus, article section > h5 a:active, +article section > h6 a:hover, article section > h6 a:focus, article section > h6 a:active { + color: #dcdcdc; +} +article > header .m-date { + display: block; + width: 2.5rem; + float: left; + text-align: center; + line-height: 95%; + font-size: 0.75rem; + font-weight: normal; + white-space: nowrap; + border-right-style: solid; + border-right-width: 0.125rem; + border-color: #a5c9ea; + padding-right: 0.75rem; + margin-top: -0.1rem; + margin-right: 0.75rem; + margin-bottom: 0.25rem; +} +article > header .m-date-day { + display: block; + font-weight: bold; + padding-top: 0.2rem; + padding-bottom: 0.15rem; + font-size: 1.25rem; +} +article > header p { + color: #f0f0f0; + font-size: 1.125rem; +} +article > header h1::after { + content: " "; + clear: both; + display: table; +} +article > footer { + color: #c5c5c5; +} +article > footer p { + font-style: italic; + font-size: 0.85rem; + text-indent: 0; +} +article section:target { + margin-left: -1.0rem; + border-left-style: solid; + border-left-width: 0.25rem; + padding-left: 0.75rem; + border-color: #a5c9ea; +} +article h1 a, article > header h1 a, article section > h2 a, article section > h3 a, +article section > h4 a, article section > h5 a, article section > h6 a { + text-decoration: none; +} +#m-landing-image, #m-cover-image, article#m-jumbo > header #m-jumbo-image { + background-size: cover; + background-color: #0f1217; + background-position: center center; + background-repeat: no-repeat; + margin-top: -4rem; + padding-top: 5rem; +} +#m-landing-image { + color: #ffffff; +} +#m-cover-image { + height: 30rem; + margin-bottom: -26rem; +} +#m-landing-cover h1 { + font-size: 2.8rem; + margin-top: -0.5rem; + padding-left: 1.5rem; + padding-bottom: 1rem; + text-transform: lowercase; +} +#m-landing-cover { + padding-bottom: 10rem; + margin-bottom: -6rem; +} +article#m-jumbo { + margin-top: -1rem; +} +#m-landing-cover, #m-cover-image > div, article#m-jumbo > header #m-jumbo-cover { + background: linear-gradient(transparent 0%, transparent 50%, #2f363f 100%); + width: 100%; + height: 100%; +} +article#m-jumbo > header h1, article#m-jumbo > header h2 { + text-align: center; + font-weight: bold; +} +article#m-jumbo > header a { + text-decoration: none; +} +article#m-jumbo > header #m-jumbo-cover { + padding-bottom: 5rem; +} +article#m-jumbo > header #m-jumbo-image { + font-size: 2.5vmin; + margin-bottom: -3rem; +} +article#m-jumbo > header h1 { + font-size: 10vmin; +} +article#m-jumbo > header h2 { + font-size: 3vmin; +} +@media screen and (max-height: 640px) , screen and (max-width: 640px) { + article#m-jumbo > header h1 { + font-size: 3rem; + } + article#m-jumbo > header #m-jumbo-image, article#m-jumbo > header h2 { + font-size: 1rem; + } +} +article#m-jumbo > header, article#m-jumbo > header h1, article#m-jumbo > header a { + color: #ffffff; +} +article#m-jumbo > header a:hover, article#m-jumbo > header a:focus, article#m-jumbo > header a:active { + color: #f0f0f0; +} +article#m-jumbo.m-inverted > header, article#m-jumbo.m-inverted > header h1, article#m-jumbo.m-inverted > header a { + color: #000000; +} +article#m-jumbo.m-inverted > header a:hover, article#m-jumbo.m-inverted > header a:focus, article#m-jumbo.m-inverted > header a:active { + color: #0f0f0f; +} +.m-landing-news h3 a { + color: #dcdcdc; + text-decoration: none; + text-transform: uppercase; +} +.m-landing-news h3 a:hover, .m-landing-news h3 a:hover, .m-landing-news h3 a:focus, .m-landing-news h3 a:active { + color: #a5c9ea; +} +.m-landing-news time { + display: inline-block; + margin-left: 1rem; + float: right; +} +.m-article-pagination { + text-align: center; + padding: 1rem; +} +nav.m-navpanel { + text-align: center; +} +nav.m-navpanel h3 { + text-transform: uppercase; + font-weight: normal; +} +nav.m-navpanel ol { + text-transform: lowercase; +} +nav.m-navpanel ol, nav.m-navpanel ul { + list-style-type: none; + padding: 0; +} +nav.m-navpanel a { + color: #ffffff; + text-decoration: none; +} +nav.m-navpanel a:hover, nav.m-navpanel a:focus, nav.m-navpanel a:active { + color: #a5c9ea; +} +ul.m-tagcloud li { display: inline; } +ul.m-tagcloud li.m-tag-1 { font-size: 0.75rem; } +ul.m-tagcloud li.m-tag-2 { font-size: 0.825rem; } +ul.m-tagcloud li.m-tag-3 { font-size: 1rem; } +ul.m-tagcloud li.m-tag-4 { font-size: 1.25rem; } +ul.m-tagcloud li.m-tag-5 { font-size: 1.5rem; } +article section:target figure.m-code-figure, article section:target figure.m-console-figure { + z-index: 1; +} +article, article > header, article section { margin-bottom: 1rem; } +article:last-child, article section:last-child { margin-bottom: 0; } +.m-container-inflatable section:target > .m-note, +.m-container-inflatable section:target > .m-frame, +.m-container-inflatable section:target > .m-block, +.m-container-inflatable section:target > pre, +.m-container-inflatable section:target > .m-code-figure > pre:first-child, +.m-container-inflatable section:target > .m-console-figure > pre:first-child, +.m-container-inflatable section:target section > .m-note, +.m-container-inflatable section:target section > .m-frame, +.m-container-inflatable section:target section > .m-block, +.m-container-inflatable section:target section > pre, +.m-container-inflatable section:target section > .m-code-figure > pre:first-child, +.m-container-inflatable section:target section > .m-console-figure > pre:first-child, +.m-container-inflatable section:target [class*='m-center-'] > .m-note, +.m-container-inflatable section:target [class*='m-center-'] > .m-frame, +.m-container-inflatable section:target [class*='m-center-'] > .m-block, +.m-container-inflatable section:target [class*='m-center-'] > pre, +.m-container-inflatable section:target [class*='m-center-'] > .m-code-figure > pre:first-child, +.m-container-inflatable section:target [class*='m-center-'] > .m-console-figure > pre:first-child, +.m-container-inflatable section:target [class*='m-left-'] > .m-note, +.m-container-inflatable section:target [class*='m-left-'] > .m-frame, +.m-container-inflatable section:target [class*='m-left-'] > .m-block, +.m-container-inflatable section:target [class*='m-left-'] > pre, +.m-container-inflatable section:target [class*='m-left-'] > .m-code-figure > pre:first-child, +.m-container-inflatable section:target [class*='m-left-'] > .m-console-figure > pre:first-child, +.m-container-inflatable section:target [class*='m-right-'] > .m-note, +.m-container-inflatable section:target [class*='m-right-'] > .m-frame, +.m-container-inflatable section:target [class*='m-right-'] > .m-block, +.m-container-inflatable section:target [class*='m-right-'] > pre, +.m-container-inflatable section:target [class*='m-right-'] > .m-code-figure > pre:first-child, +.m-container-inflatable section:target [class*='m-right-'] > .m-console-figure > pre:first-child, +.m-container-inflatable section:target .m-container-inflate > .m-note, +.m-container-inflatable section:target .m-container-inflate > .m-frame, +.m-container-inflatable section:target .m-container-inflate > .m-block, +.m-container-inflatable section:target .m-container-inflate > pre, +.m-container-inflatable section:target .m-container-inflate > .m-code-figure > pre:first-child, +.m-container-inflatable section:target .m-container-inflate > .m-console-figure > pre:first-child { + margin-left: -1.0rem; + border-left-style: solid; + border-left-width: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + padding-left: 0.75rem; +} +.m-container-inflatable section:target > .m-code-figure::before, +.m-container-inflatable section:target > .m-console-figure::before, +.m-container-inflatable section:target section > .m-code-figure::before, +.m-container-inflatable section:target section > .m-console-figure::before, +.m-container-inflatable section:target [class*='m-center-'] > .m-code-figure::before, +.m-container-inflatable section:target [class*='m-center-'] > .m-console-figure::before, +.m-container-inflatable section:target [class*='m-left-'] > .m-code-figure::before, +.m-container-inflatable section:target [class*='m-left-'] > .m-console-figure::before, +.m-container-inflatable section:target [class*='m-right-'] > .m-code-figure::before, +.m-container-inflatable section:target [class*='m-right-'] > .m-console-figure::before, +.m-container-inflatable section:target .m-container-inflate > .m-code-figure::before, +.m-container-inflatable section:target .m-container-inflate > .m-console-figure::before { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-width: 0.25rem; +} +.m-container-inflatable section:target > .m-code-figure > pre.m-nopad, +.m-container-inflatable section:target > .m-console-figure > pre.m-nopad { + margin-left: -0.75rem; + padding-left: -0.75rem; +} +@media screen and (min-width: 576px) { + .m-container-inflatable section:target .m-center-s > .m-note, + .m-container-inflatable section:target .m-center-s > pre, + .m-container-inflatable section:target .m-center-s > figure.m-code-figure > pre:first-child, + .m-container-inflatable section:target .m-center-s > figure.m-console-figure > pre:first-child, + .m-container-inflatable section:target .m-right-s > figure.m-code-figure > pre:first-child, + .m-container-inflatable section:target .m-right-s > figure.m-console-figure > pre:first-child { + border-left-width: 0; + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + padding-left: 1rem; + } + .m-container-inflatable section:target .m-center-s > .m-block, + .m-container-inflatable section:target .m-right-s > .m-block { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + } + .m-container-inflatable section:target .m-center-s > .m-frame, + .m-container-inflatable section:target .m-right-s > .m-frame { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + border-left-width: 0.125rem; + padding-left: 0.875rem; + } + .m-container-inflatable section:target .m-right-s > .m-block, + .m-container-inflatable section:target .m-right-s > .m-frame { + margin-left: 0; + } + .m-container-inflatable section:target .m-right-s > .m-note, + .m-container-inflatable section:target .m-right-s > pre { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + margin-left: 0; + border-left-width: 0; + padding-left: 1rem; + } + .m-container-inflatable section:target .m-center-s > figure.m-code-figure::before, + .m-container-inflatable section:target .m-center-s > figure.m-console-figure::before, + .m-container-inflatable section:target .m-right-s > figure.m-code-figure::before, + .m-container-inflatable section:target .m-right-s > figure.m-console-figure::before { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + border-left-width: 0.125rem; + } +} +@media screen and (min-width: 768px) { + .m-container-inflatable section:target .m-center-m > .m-note, + .m-container-inflatable section:target .m-center-m > pre, + .m-container-inflatable section:target .m-center-m > figure.m-code-figure > pre:first-child, + .m-container-inflatable section:target .m-center-m > figure.m-console-figure > pre:first-child, + .m-container-inflatable section:target .m-right-m > figure.m-code-figure > pre:first-child, + .m-container-inflatable section:target .m-right-m > figure.m-console-figure > pre:first-child { + border-left-width: 0; + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + padding-left: 1rem; + } + .m-container-inflatable section:target .m-center-m > .m-block, + .m-container-inflatable section:target .m-right-m > .m-block { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + } + .m-container-inflatable section:target .m-center-m > .m-frame, + .m-container-inflatable section:target .m-right-m > .m-frame { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + border-left-width: 0.125rem; + padding-left: 0.875rem; + } + .m-container-inflatable section:target .m-right-m > .m-block, + .m-container-inflatable section:target .m-right-m > .m-frame { + margin-left: 0; + } + .m-container-inflatable section:target .m-right-m > .m-note, + .m-container-inflatable section:target .m-right-m > pre { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + margin-left: 0; + border-left-width: 0; + padding-left: 1rem; + } + .m-container-inflatable section:target .m-center-m > figure.m-code-figure::before, + .m-container-inflatable section:target .m-center-m > figure.m-console-figure::before, + .m-container-inflatable section:target .m-right-m > figure.m-code-figure::before, + .m-container-inflatable section:target .m-right-m > figure.m-console-figure::before { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + border-left-width: 0.125rem; + } +} +@media screen and (min-width: 992px) { + .m-container-inflatable section:target .m-center-l > .m-note, + .m-container-inflatable section:target .m-center-l > pre, + .m-container-inflatable section:target .m-center-l > figure.m-code-figure > pre:first-child, + .m-container-inflatable section:target .m-center-l > figure.m-console-figure > pre:first-child, + .m-container-inflatable section:target .m-right-l > figure.m-code-figure > pre:first-child, + .m-container-inflatable section:target .m-right-l > figure.m-console-figure > pre:first-child { + border-left-width: 0; + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + padding-left: 1rem; + } + .m-container-inflatable section:target .m-center-l > .m-block, + .m-container-inflatable section:target .m-right-l > .m-block { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + } + .m-container-inflatable section:target .m-center-l > .m-frame, + .m-container-inflatable section:target .m-right-l > .m-frame { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + border-left-width: 0.125rem; + padding-left: 0.875rem; + } + .m-container-inflatable section:target .m-right-l > .m-block, + .m-container-inflatable section:target .m-right-l > .m-frame { + margin-left: 0; + } + .m-container-inflatable section:target .m-right-l > .m-note, + .m-container-inflatable section:target .m-right-l > pre { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + margin-left: 0; + border-left-width: 0; + padding-left: 1rem; + } + .m-container-inflatable section:target .m-center-l > figure.m-code-figure::before, + .m-container-inflatable section:target .m-center-l > figure.m-console-figure::before, + .m-container-inflatable section:target .m-right-l > figure.m-code-figure::before, + .m-container-inflatable section:target .m-right-l > figure.m-console-figure::before { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; + border-left-width: 0.125rem; + } +} +.m-container-inflatable section:target > figure.m-code-figure::before, +.m-container-inflatable section:target > figure.m-console-figure::before, +.m-container-inflatable section:target section > figure.m-code-figure::before, +.m-container-inflatable section:target section > figure.m-console-figure::before, +.m-container-inflatable section:target [class*='m-center-'] > figure.m-code-figure::before, +.m-container-inflatable section:target [class*='m-center-'] > figure.m-console-figure::before, +.m-container-inflatable section:target [class*='m-left-'] > figure.m-code-figure::before, +.m-container-inflatable section:target [class*='m-left-'] > figure.m-console-figure::before, +.m-container-inflatable section:target [class*='m-right-'] > figure.m-code-figure::before, +.m-container-inflatable section:target [class*='m-right-'] > figure.m-console-figure::before, +.m-container-inflatable section:target .m-container-inflatable > figure.m-code-figure::before, +.m-container-inflatable section:target .m-container-inflatable > figure.m-console-figure::before { + border-left-color: #405363; +} +@media screen and (min-width: 576px) { + .m-container-inflatable section:target .m-center-s > figure.m-code-figure::before, + .m-container-inflatable section:target .m-right-s > figure.m-code-figure::before { + border-color: #282e36; + } + .m-container-inflatable section:target .m-center-s > figure.m-console-figure::before, + .m-container-inflatable section:target .m-right-s > figure.m-console-figure::before { + border-color: #1a1c1d; + } +} +@media screen and (min-width: 768px) { + .m-container-inflatable section:target .m-center-m > figure.m-code-figure::before, + .m-container-inflatable section:target .m-right-m > figure.m-code-figure::before { + border-color: #282e36; + } + .m-container-inflatable section:target .m-center-m > figure.m-console-figure::before, + .m-container-inflatable section:target .m-right-m > figure.m-console-figure::before { + border-color: #1a1c1d; + } +} +@media screen and (min-width: 992px) { + .m-container-inflatable section:target .m-center-l > figure.m-code-figure::before, + .m-container-inflatable section:target .m-right-l > figure.m-code-figure::before { + border-color: #282e36; + } + .m-container-inflatable section:target .m-center-l > figure.m-console-figure::before, + .m-container-inflatable section:target .m-right-l > figure.m-console-figure::before { + border-color: #1a1c1d; + } +} +.m-container-inflatable section:target pre, +.m-container-inflatable section:target figure.m-code-figure > pre:first-child, +.m-container-inflatable section:target figure.m-console-figure > pre:first-child { + border-color: #405363; +} +.m-container-inflatable section:target .m-note.m-default { + border-color: #405363; +} +.m-container-inflatable section:target .m-note.m-primary { + border-color: #a5c9ea; +} +.m-container-inflatable section:target .m-note.m-success { + border-color: #3bd267; +} +.m-container-inflatable section:target .m-note.m-warning { + border-color: #c7cf2f; +} +.m-container-inflatable section:target .m-note.m-danger { + border-color: #cd3431; +} +.m-container-inflatable section:target .m-note.m-info { + border-color: #2f83cc; +} +.m-container-inflatable section:target .m-note.m-dim { + border-color: #747474; +} + +.m-code .hll { background-color: #34424d } +.m-code .c { color: #a5c9ea } +.m-code .k { color: #ffffff; font-weight: bold } +.m-code .n { color: #dcdcdc } +.m-code .o { color: #aaaaaa } +.m-code .p { color: #aaaaaa } +.m-code .ch { color: #a5c9ea } +.m-code .cm { color: #a5c9ea } +.m-code .cp { color: #3bd267 } +.m-code .cpf { color: #c7cf2f } +.m-code .c1 { color: #a5c9ea } +.m-code .cs { color: #a5c9ea } +.m-code .gd { color: #cd3431 } +.m-code .ge { color: #e6e6e6; font-style: italic } +.m-code .gh { color: #ffffff; font-weight: bold } +.m-code .gi { color: #3bd267 } +.m-code .gs { color: #e6e6e6; font-weight: bold } +.m-code .gu { color: #5b9dd9 } +.m-code .kc { color: #ffffff; font-weight: bold } +.m-code .kd { color: #ffffff; font-weight: bold } +.m-code .kn { color: #ffffff; font-weight: bold } +.m-code .kp { color: #ffffff; font-weight: bold } +.m-code .kr { color: #ffffff; font-weight: bold } +.m-code .kt { color: #ffffff; font-weight: bold } +.m-code .m { color: #c7cf2f } +.m-code .s { color: #e07f7c } +.m-code .na { color: #dcdcdc; font-weight: bold } +.m-code .nb { color: #ffffff; font-weight: bold } +.m-code .nc { color: #dcdcdc; font-weight: bold } +.m-code .no { color: #dcdcdc } +.m-code .nd { color: #dcdcdc } +.m-code .ni { color: #dcdcdc } +.m-code .ne { color: #dcdcdc } +.m-code .nf { color: #dcdcdc } +.m-code .nl { color: #dcdcdc } +.m-code .nn { color: #dcdcdc } +.m-code .nx { color: #dcdcdc } +.m-code .py { color: #dcdcdc } +.m-code .nt { color: #dcdcdc; font-weight: bold } +.m-code .nv { color: #c7cf2f } +.m-code .ow { color: #dcdcdc; font-weight: bold } +.m-code .mb { color: #c7cf2f } +.m-code .mf { color: #c7cf2f } +.m-code .mh { color: #c7cf2f } +.m-code .mi { color: #c7cf2f } +.m-code .mo { color: #c7cf2f } +.m-code .sa { color: #e07f7c } +.m-code .sb { color: #e07f7c } +.m-code .sc { color: #e07cdc } +.m-code .dl { color: #e07f7c } +.m-code .sd { color: #e07f7c } +.m-code .s2 { color: #e07f7c } +.m-code .se { color: #e07cdc } +.m-code .sh { color: #e07f7c } +.m-code .si { color: #a5c9ea } +.m-code .sx { color: #e07f7c } +.m-code .sr { color: #e07f7c } +.m-code .s1 { color: #e07f7c } +.m-code .ss { color: #e07f7c } +.m-code .bp { color: #ffffff; font-weight: bold } +.m-code .fm { color: #dcdcdc } +.m-code .vc { color: #c7cf2f } +.m-code .vg { color: #c7cf2f } +.m-code .vi { color: #c7cf2f } +.m-code .vm { color: #c7cf2f } +.m-code .il { color: #c7cf2f } + +.m-console .hll { background-color: #ffffcc } +.m-console .g-AnsiBackgroundBlack { background-color: #232627 } +.m-console .g-AnsiBackgroundBlue { background-color: #1d99f3 } +.m-console .g-AnsiBackgroundBrightBlack { background-color: #7f8c8d } +.m-console .g-AnsiBackgroundBrightBlue { background-color: #3daee9 } +.m-console .g-AnsiBackgroundBrightCyan { background-color: #16a085 } +.m-console .g-AnsiBackgroundBrightGreen { background-color: #1cdc9a } +.m-console .g-AnsiBackgroundBrightMagenta { background-color: #8e44ad } +.m-console .g-AnsiBackgroundBrightRed { background-color: #c0392b } +.m-console .g-AnsiBackgroundBrightWhite { background-color: #ffffff } +.m-console .g-AnsiBackgroundBrightYellow { background-color: #fdbc4b } +.m-console .g-AnsiBackgroundCyan { background-color: #1abc9c } +.m-console .g-AnsiBackgroundGreen { background-color: #11d116 } +.m-console .g-AnsiBackgroundMagenta { background-color: #9b59b6 } +.m-console .g-AnsiBackgroundRed { background-color: #ed1515 } +.m-console .g-AnsiBackgroundWhite { background-color: #fcfcfc } +.m-console .g-AnsiBackgroundYellow { background-color: #f67400 } +.m-console .g-AnsiBlack { color: #232627 } +.m-console .g-AnsiBlue { color: #1d99f3 } +.m-console .g-AnsiBrightBlack { color: #7f8c8d; font-weight: bold } +.m-console .g-AnsiBrightBlue { color: #3daee9; font-weight: bold } +.m-console .g-AnsiBrightCyan { color: #16a085; font-weight: bold } +.m-console .g-AnsiBrightDefault { color: #ffffff; font-weight: bold } +.m-console .g-AnsiBrightGreen { color: #1cdc9a; font-weight: bold } +.m-console .g-AnsiBrightMagenta { color: #8e44ad; font-weight: bold } +.m-console .g-AnsiBrightRed { color: #c0392b; font-weight: bold } +.m-console .g-AnsiBrightWhite { color: #ffffff; font-weight: bold } +.m-console .g-AnsiBrightYellow { color: #fdbc4b; font-weight: bold } +.m-console .g-AnsiCyan { color: #1abc9c } +.m-console .g-AnsiGreen { color: #11d116 } +.m-console .g-AnsiMagenta { color: #9b59b6 } +.m-console .g-AnsiRed { color: #ed1515 } +.m-console .g-AnsiWhite { color: #fcfcfc } +.m-console .g-AnsiYellow { color: #f67400 } +.m-console .go { color: #fcfcfc } +.m-console .gp { color: #16a085; font-weight: bold } +.m-console .w { color: #fcfcfc } + +a.m-doc, a.m-doc-self, a.m-doc-external, +ul.m-doc li.m-doc-expansible > a:first-child, ul.m-doc li.m-doc-collapsible > a:first-child, +.m-code.m-inverted.m-doc-include > a { + text-decoration: none; +} +a.m-doc, a.m-doc-self { + font-weight: bold; +} +.m-thin a.m-doc, .m-thin a.m-doc-self { + font-weight: normal; +} +ul.m-doc li.m-doc-expansible > a:first-child, +ul.m-doc li.m-doc-collapsible > a:first-child, +ul.m-doc li.m-doc-expansible > a:first-child:hover, +ul.m-doc li.m-doc-expansible > a:first-child:focus, +ul.m-doc li.m-doc-expansible > a:first-child:active, +ul.m-doc li.m-doc-collapsible > a:first-child:hover, +ul.m-doc li.m-doc-collapsible > a:first-child:focus, +ul.m-doc li.m-doc-collapsible > a:first-child:active { + color: #dcdcdc; +} +a.m-doc-self, +ul.m-doc li.m-doc-expansible > a:first-child::before, +ul.m-doc li.m-doc-collapsible > a:first-child::before { + color: #a5c9ea; +} +a.m-doc-self:hover, a.m-doc-self:focus, a.m-doc-self:active, +ul.m-doc li.m-doc-expansible > a:first-child:hover::before, +ul.m-doc li.m-doc-expansible > a:first-child:focus::before, +ul.m-doc li.m-doc-expansible > a:first-child:active::before, +ul.m-doc li.m-doc-collapsible > a:first-child:hover::before, +ul.m-doc li.m-doc-collapsible > a:first-child:focus::before, +ul.m-doc li.m-doc-collapsible > a:first-child:active::before { + color: #dcdcdc; +} +h3 a.m-doc-external { + font-weight: normal; +} +span.m-doc-wrap-bumper { + margin-right: -1rem; +} +span.m-doc-wrap { + margin-left: 1rem; + display: inline-block; + vertical-align: text-top; + white-space: pre-line; + max-width: 100%; +} +dl.m-doc dd { + margin-bottom: 0.5rem; +} +dl.m-doc dd { + margin-left: 0; + padding-left: 2.5rem; +} +dl.m-doc dt:target, dl.m-doc dt:target + dd { + margin-left: -1.0rem; + border-left-style: solid; + border-left-width: 0.25rem; + border-color: #a5c9ea; +} +dl.m-doc dt:target { padding-left: 0.75rem; } +dl.m-doc dt:target + dd { padding-left: 3.25rem; } +ul.m-doc { + list-style: none; + margin-left: 1.0375rem; + padding-left: 0.9rem; + border-left-color: #405363; + border-left-width: 0.0625rem; + border-left-style: solid; +} +ul.m-doc li { + text-indent: -1rem; + padding-left: 1rem; +} +ul.m-doc li.m-doc-expansible > ul { + display: none; +} +ul.m-doc li.m-doc-expansible, ul.m-doc li.m-doc-collapsible { + padding-left: 0.6rem; +} +ul.m-doc li.m-doc-expansible > ul.m-doc, ul.m-doc li.m-doc-collapsible > ul.m-doc { + margin-left: 0.5rem; +} +ul.m-doc li.m-doc-expansible > a:first-child::before, ul.m-doc li.m-doc-collapsible > a:first-child::before { + background-color: #2f363f; + display: inline-block; + width: 0.4rem; + font-weight: bold; +} +ul.m-doc li.m-doc-expansible > a:first-child::before { content: '⊕'; } +ul.m-doc li.m-doc-collapsible > a:first-child::before { content: '⊖'; } +h1 .m-doc-template, h1 .m-doc-include { + font-size: 1.3rem; + font-weight: normal; +} +h1 .m-doc-include:last-child { + margin-bottom: -0.5rem; +} +h3 .m-doc-template, h3 .m-doc-include { + font-size: 1rem; + font-weight: normal; +} +.m-doc-template, dl.m-doc dd, ul.m-doc li > span.m-doc { + color: #747474; +} +dl.m-doc dd svg.m-math, ul.m-doc li > span.m-doc svg.m-math { + fill: #747474; +} +.m-doc-template a, dl.m-doc dd a, ul.m-doc li > span.m-doc a { + color: #acacac; +} +.m-doc-template a:hover, .m-doc-template a:focus, .m-doc-template a:active, +dl.m-doc dd a:hover, dl.m-doc dd a:focus, dl.m-doc dd a:active, +ul.m-doc li > span.m-doc a:hover, ul.m-doc li > span.m-doc a:focus, ul.m-doc li > span.m-doc a:active { + color: #747474; +} +.m-code.m-inverted.m-doc-include > a:link, +.m-code.m-inverted.m-doc-include > a:visited { + opacity: 0.6666; +} +.m-code.m-inverted.m-doc-include > a:hover, +.m-code.m-inverted.m-doc-include > a:focus, +.m-code.m-inverted.m-doc-include > a:active { + opacity: 1; +} +article section.m-doc-details > div { + margin-top: 0; + margin-left: 0; + margin-right: 0; + position: relative; + padding: 1rem; +} +article section.m-doc-details > div::before { + position: absolute; + content: ' '; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; + border-style: solid; + border-width: 0.125rem; + border-radius: 0.2rem; + border-color: #282e36; +} +article section.m-doc-details > div > h3:first-child { + position: relative; + margin: -1rem -1rem 1rem -1rem; + padding: 0.5rem 1rem; + background-color: #282e36; + border-top-left-radius: 0.2rem; + border-top-right-radius: 0.2rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +article section.m-doc-details:target { + border-color: transparent; +} +article section.m-doc-details:target > div { + z-index: 1; +} +.m-container-inflatable > .m-row > [class*='m-col-'] section.m-doc-details > div { + margin-left: -1rem; + margin-right: -1rem; +} +.m-container-inflatable section.m-doc-details:target > div > h3:first-child, +.m-container-inflatable section.m-doc-details:target section > div > h3:first-child { + margin-left: -1.0rem; + border-left-style: solid; + border-left-color: #dcdcdc; + border-left-width: 0.25rem; + padding-left: 0.75rem; +} +.m-container-inflatable section.m-doc-details:target > div::before, +.m-container-inflatable section-dox-details:target section > div.m::before { + border-left-width: 0.25rem; + border-left-color: #a5c9ea; +} +a.m-doc-search-icon { + padding-left: 1rem; + padding-right: 1rem; +} +a.m-doc-search-icon svg { + fill: #ffffff; +} +body > header > nav #m-navbar-collapse a.m-doc-search-icon svg { + vertical-align: -5%; +} +a.m-doc-search-icon:focus svg, a.m-doc-search-icon:hover svg, a.m-doc-search-icon:active svg { + fill: #a5c9ea; +} +.m-doc-search { + display: none; + z-index: 10; + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-color: rgba(34, 39, 46, 0.75); +} +.m-doc-search:target { + display: block; +} +.m-doc-search > a { + display: block; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; +} +.m-doc-search-header { + margin-top: 2.5rem; + padding: 0.5rem 1rem; + height: 2rem; +} +.m-doc-search-header > div:first-child { + float: right; +} +.m-doc-search-content { + background-color: #22272e; + border-radius: 0.2rem; + padding: 1rem; +} +.m-doc-search input { + width: 100%; + height: 3rem; + font-size: 1.2rem; + border-width: 0; + color: #dcdcdc; + background-color: #34424d; + border-radius: 0.2rem; + margin-bottom: 1rem; + padding: 0 1rem; +} +.m-doc-search #search-notfound { + display: none; +} +.m-doc-search ul#search-results { + list-style-type: none; + padding-left: 0; + max-height: calc(100vh - 12.5rem); + overflow-y: auto; + display: none; +} +.m-doc-search ul#search-results li a { + display: block; + padding-left: 1rem; + padding-right: 1rem; + text-decoration: none; + width: 100%; + line-height: 1.5rem; + color: #dcdcdc; +} +.m-doc-search ul#search-results li a > div { + white-space: nowrap; + overflow: hidden; +} +.m-doc-search ul#search-results li a > div:not(.m-doc-search-alias) { + direction: rtl; +} +.m-doc-search ul#search-results li a .m-label { + float: right; + line-height: 1rem; + margin-top: 0.1rem; + margin-left: 0.25rem; +} +.m-doc-search ul#search-results li a .m-label.m-flat { + margin-right: -0.75rem; +} +.m-doc-search ul#search-results li#search-current a { + background-color: #34424d; +} +.m-doc-search ul#search-results li#search-current.m-doc-search-copied a { + background-color: #2a703f; +} +.m-doc-search-typed { + color: #5b9dd9; +} +.m-doc-search input[type="search"] { -webkit-appearance: textfield; } +.m-doc-search input[type="search"]::-webkit-search-decoration, +.m-doc-search input[type="search"]::-webkit-search-cancel-button, +.m-doc-search input[type="search"]::-webkit-search-results-button, +.m-doc-search input[type="search"]::-webkit-search-results-decoration { + display: none; +} diff --git a/md__drone_src_README.html b/md__drone_src_README.html new file mode 100644 index 0000000..5476feb --- /dev/null +++ b/md__drone_src_README.html @@ -0,0 +1,99 @@ + + + + + Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

+ Qt BluetoothLE UART library +

+

A library for Qt to make using Bluetooth LE UART easier. Documentation is available here

+
+
+
+
+ + + +
+ + diff --git a/modules.html b/modules.html new file mode 100644 index 0000000..b486da7 --- /dev/null +++ b/modules.html @@ -0,0 +1,114 @@ + + + + + Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

Modules

+
    +
+ +
+
+
+
+ + + +
+ + diff --git a/namespaces.html b/namespaces.html new file mode 100644 index 0000000..732c3cf --- /dev/null +++ b/namespaces.html @@ -0,0 +1,114 @@ + + + + + Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

Namespaces

+
    +
+ +
+
+
+
+ + + +
+ + diff --git a/pages.html b/pages.html new file mode 100644 index 0000000..fa9c8b2 --- /dev/null +++ b/pages.html @@ -0,0 +1,115 @@ + + + + + Qt BluetoothLE UART library + + + + + + + +
+
+
+
+
+

Pages

+ + +
+
+
+
+ + + +
+ + diff --git a/refman.pdf b/refman.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0f6f893009fc50c414a9bbb6b34d80aabc7e6feb GIT binary patch literal 105490 zcmd42W3VXQvMso5+qP}nwr$(mOMBV2v6pSzwryMe-FNSM{W{K$zNaHPqI>?Ts6SP6 z)Xb41M`n>Kh=|cL(y>C3&MpqELNPLM5-aT5IJf}$6* zv~e+YBA^$uF?2B%F*UX~F@@segK~CpGBvb?@>mav<%RBNKoEHOj=)aLKRKFcEF988 zKqr;kH?aI8WSK8A>tDlI_-g?d{+c%?4?KvhkiWrc&8QF+;&(9u*d}TbLs=6TF)f-{ z;KlCXbKuE5+8-=DJ{jfKt8Ng`GASq>qpC{$(ruM1$Ty{{Vb|(Mz&i`Ef z$9@?ZS^u*0|G9C3|9)wI6$nL^iiaREcoqL7>&A?D z792vyRn9y6np9jsP#*%yi#`Au#+N4W5fTOCk?8hx@LKt%-Ffb!)2-GM77&IcND6`= zIVgew0ggLX9zx`Jja4A-9qKdV%LxLbG>+M-n|#;$r21Dy@q}l+AM4&1mGLDNkg!Q~ zU$uCV)AhX*k1QD%e)N6cl&I%H-_a;%n>(bF*HJc!-*nLA6N6JpgTIk1KosR@8x#7{ z;?Y98;g+=VPd`Dmd)jMyB>#Mc7EH#Y(hSD_KD;AkDUh--b7sDMcH&x z>}h<+M`I!$F+JhjbBx6MDZQr!Bq%jvOIPmOu2W)lDFGN@f(pL zsVcg|zqduGzv)bQTeLL)v`bN85W3WMUTZUbqa~E<=(6B^`Jl*!mRM=dfiRe9sY;$) z8C>|qQBY9mqQ%tqw`mudd>K@(H`F^-V7u4oN5B*_XNR^|Gg2Lm9A^+V<2`yQliMh_ zAniEo?!Gd^J(*!hhr%Ik7SH=v8yKa}!vIF%GUcEMlUgcII&;3b`XPy?`kY6iSe1k_yHwfkPs?H28?ezFp(?nQvTL zF>dUvWK_eByLC&i(N%%8E3!$sx@U!Kt(+LKPk3n-kS|Y+f5~%Lxcy4Pp}Oca?T=&A zYy{-eN_rTE&J1u4f=9JqyAKy#_o>6&9w72%0VI#WWoV{-u2{B{r5&O2Kf9|ScAF+F z@JK{<^Nz8TVxs&fI8LL44MW$))wz~5<2F#(k^2`z*MmM=EdAX?@)p{E_WbJQ|1Z-8EAzk71t%NxzfBj>YO?kl90*+>>IfF_NbMz(l8a&JyeyVRCUdbIuC-x} z6eho$m&Oy+3KE`rZlWaC>TDX@(uA$dUXQ1UEyb3DDV2MO>ARv$s1e0Z0}|W5FXM^+m!C|L?ujL^iJC63T6SM#FYdgk++hTxq< ztQ*I+El1Bo%a5vWK4NCt=;8=N{IUH+o=5=~(5&MV;|xF&=n`kd{%u0Yo3$VTAv?2_ zs=WdjOVFt1+P0*&qK{#^X+nV9M^o{e?<@gbA?%@Bdb(R0R$%f#I7}gs1!{A4Fi-&4 zkSj@`icjQfytzA3b!`BKK*0MCbFprQTU*HTiIV)mVz6COMaG#)Lb(}aMp3!X{#pcM%P5%@dqy#o`@3&=N@XMDcjOe zfLPG+wyLMggX?BG|51^-3Oer*5_{!x^3|c~fE$74S|;AF@wCK=GtYYXW3#5lwiYG zo;v%mQGy2|(HjmiNjQ@RcCUYbcH@LG?Oji-^{~8nTnS>G#FZ?J5iUs@W`*{17uGeg zyp)rTEF8K}%crly1iR0n7a0DS3LPorS*BxLk0<+S0fLaTc9&UfPKg}~O2271Vf7t# zCwx)Ew4TlNFBv`VglGC3#|9%LwPlfP%nh)MDZPS_r?x9fzduCc2>9hS4TkN^J2QAAmwr zd5vnE3cM0an2~a`MNOukXb&)^jQ2bk&tXn;kx&LFihJf1##Jb~+LvM6bTK{20Ah}k zrEV@Sv@4j7_mUJ|Lo!}cGT*x1ge-6u1`i6)HG&FcSHvGs?%hI_C4z`f3_zZYGOa|W zjM!=u<&?}Tc^3*Nz1PzWLv}aPS&cFPFF*#; zS>p%-tcvg`tJR*T8z78TuytApryGKpU>X!$J#ZGZ)tnS>4zhfgg4JdWz15U;=L8>(?Ra?^&5+@DN7$RO2!WRf0A_8i7lorerX8q2DKp}vmd>3FL=wx?Io(3`= zkfB#aVyX&83X=ih*5Z)Tf*>KDnh0JH0#+mpL*o{(IJ}u4J*|k5D2|p!7=6scGOM@E zW1JuzaGa}fm!dl0&tZcO;0>Y%4TqFsr-KL89^{1qIdtW$#yDUKVUSIcy960>6rn^? z)+qE`5HT9oI7Eif(VtT|;XXm{<%-K8WS^OCMWXXdGI;!o^Wuu`+@6fea}{4^U;jHt zRr*HXyzVcz`zh-fz}(k$4C7)C+pPHaHk8UK>e%Aelzp*?c9yi%g10xl2y!K#mbcd# zC7y)+5R@9W8&$7$iN2eX?UcjD&jBEiRMODNr!UhSmZse@Er54&wU z0W3I(moPI4?1gH9b5|7nOH_Axjnf_CYkIxM;1=XX{PrRn%p9~<^`jFlhmQJAnoz#0 z6&-tz7m%kS>Pu5fyGZ{4qL#?vEvNz7FL&SX4(|7#qSqdtJoBE7@|{K(H5y%X`s>sD zn}^vKZ;r*QyXlav@BS(e9$H}+EwJ0LDjmnLPptPeh%XtQ9&NaC>Fd?;CUWn@?W#0S zMZ9l+_p~ZlwxlItnpp&Bmt2~xl#U+v2aT^K4UHLF0wWECMf&IkI%srWlfjRS;vTf}*Q{#+Muz=eg_QqVdmE))B`lHHdPrMZ5pI^hDsc$UT zKrtiJ>n|+H!+dDQ{O+pmwN=Uzy4Q3ak%PzU_N0=y)U!=5?7TqPaMQi8moLI_3vmOF z@Gh@T4kCDNX<<0W{@DZg&&7GbGN0lbIkWgJ5d5hNEQNYy=a*JbVo^Lk9OZgncXet@ z4Uz6oMO^7KYEL#zD$6F8oaK6p6K_*STJ)K}T8`%z-tW)%?>-Z`*qtmgx=JuqoYYD` z&48q#(-fAK7CNs?8(#FkKlo9j<(!T&s@M(}FOT2fr&62E1@b{YG@aYcGfN$6yqeSG z^_Qt#;W|srE4)!tIqF091a79U9AFi_k>hAmE90CFa_ z9X`AO!NLIsN%pX_z@}efg|b+=zziNd7^B>$wVYWiHiyNM%Tbd^qQr*qaoxfrh^|;c z;@i-orG#E_2jH$!g})rcHg=C*^@)FjjIwHShX;($OSf)Hpw8Aa3tHF8eb6(fhZi#uu*#XTyVy}jD?P5<|j#Jf|-Z| z(GNl7&r&d_P88L57=OeV=Q3QeYREvigs*VN`$t5>>;pv$l^IO=@w(RT+Hl`E_Dt-1 zBZ%jQv3Jeb)+F@77l)UQ>BP82AmJtcbq&!1E9YbXRWgS57&FSaA8k_H;n!0GC7DTebhAH@DJ9~>zv>G{Hn#sw zVf>c?#PmM}#J^#KB**c}4=^Bvy8lFAU*(UyF;A~n;42L&F(@zP+inIWu@ON9eR|`B z)iN+{oi%;E<`B06^@Y*`d246`#TGkb^@BnQ-Qb`U3y~A5)SgJ;^rJPVNUWEdb8fmC zl|ap)KZ##vlz98)&w*4YDiWTXQ07v$I({}nlA_WxND{`cC; zR;f+tALOpSP_@TFg_cb_WC%>aEPzUklpqR7a$W&O_Flc!wlN@to5G4-p1YC*U?I}P zjiPii;zAi>OGI7#Oi@WN+1q6EG=!-<%xG6t9J943)NV)Vny-srbbZK7hfO+Zs(*H2 z2$Y;inJ@)FvNXqRGZsEX<>gD4`d(}|?Cs4LJ;Iv|5<55;|K!Q3^0~sLGd;h-&y?+d zN>Pt`*u_6fl*ZE$wnGXPgP@WJfpU-{*q>G#Pj19S7&1ipO4qq{Xh0p8b6rlD37@?j zs=z&z@;?xp2;$y6lX97Y9E?`5cG%>?H`#lwq}mF*kMoM6w{9C*rcqPBpj3<}T1hA* z1>i=l$=vBDNRRz{DULc$tf8)gGXQke)|EoX_P7$l*ERpr+7-uY)*9Aau5(xQj;jkAndkZ=t2(K)P!j*+NQuIYkU zK(n<^PxZdrpZ4`&<&EoM5Bx8;t_LKLXfsr}&~LM?)vgJt*#?Kk$2EH+gB9_@Yj$mG zv4`1~`i&B;jJep+>)fz9o&tojUKQujv|i4_{Krc4i7k#-vr4Z{7uW7H^0KcYj!yv`X((hSz+r zgY3*pqJ<#harx;lzwb3kplv$-bgxg*;gV+7Y;VJa2!E4#|0t1nmfweA-MK6iP2ciE z_Qm_A={|B6k1_S6q-0q_U6N=kAZpj={b!K$POn}Ln*nh+(&RuOG@bI*K_FZqifNXl z-HHNx!GfZOX_?cI|M+-*n2(1Bxi2{f8(-^{2uxeQlyrZ)TRLTT{q0b3{3RTj82{}< z^&d$Im=PxQrWQCT zqw`>e#}J zj_hmGeMnrF{#~KD0^+j9Qz}g-;JHZ6I;i?NMc_0OME~Fr63F|I!G^oP(o6Bt z`4;8JgNfMl1ApST?yM*zu=j4jWWHFE6{i!Ol)fOpwEM3OxWN@|K7aO{$D?-UhWEhv z*v^H(yG#+DQX7iTZ(9J~<5X^Bak2th_ewNgy{J<}a< zX1OfIF%+=);tHV{?y)3-NqbRBXLB|xQbhq|4ADkX5Sj;MmL6KJ!-Cg%kTFVGl-LL| zM@ZEB$ehd4um=xun+Ta_hN*gZDeNqH*KTX~v;l4i-yvaf@O@-UHpgkRsJwor;p&&HAYlSNJ{Tu(K|)XJYr*t zeE5GbpZQ8-UAr7sk`0hzSj%$U3^arSfl3!G3oq6e6IGrEU5qR2c)LKRvLVUsoAB?Q z(7-khRj*E-(8ci8H(1&ktfLTt>~X22I6h{!W+rr>2(NRRimUlOC|{xn*va#>cWShD zgevS5PvBn0S_;C~ScyjJDyHqTR4?+kY!D#Zml#UXzhpUG=5mwWobd}ZAfMMFhs7h^ zIAHz27vW#vu_zh$P*C0bmRJRgzf5Pak2NFk-UHnwBw~tvc@b0!@%uP=VlJgc3{xoT z?%0r?Me}{S$lK>8Her^|TDH&+^ISW=UtKQX?8`E%6l}w1vR5dg|1}Vp82*xrm>B>4 zc3W~RqdgEKOvwMBjerXhx9OG?G?nIxH3ZUKd}2_vLN{)EW2rkir4N@uL)@k=sd6lPlFLh5>`V%}H>*O3IH@I$F~b^`3t7bs zYaEO1aLdk{KZ8$>W9D~6&BO$8PI|C2mButV64>u!74wjh8Z2v`S7q%?jCh`G0!<|u z^$0*GErJSx{I~H~ z0SQKA1bYd`IKCN{TkchoVck-|qshSUkc^!AxHiIgc1F|TylHh8!`ZB1RnX*^nA97s zE@#)GJgcn{ka8AT6vbVN=5JioYx;03?BN$x`mjWva->q~g>Cof=;W$g=M^S`q~VPU z=QtH@+JqQy+bY*?ttvk%@-!!J^c$5)wmVD1IkT{g-d90iz`yyD=7fXuhYj~BMAHSz zp68A;1g}!)woDL2;bI?#c_m28oHCedZ)xB6OH(5&C}$c!Z9ODkPA_gxYh4g0a}XBrN?(E91`~$zaS^Z}T>qz-b1^$#xq! zJ={=7g?p_EegqzD*joZ+(BUh8Jg|)b_OG5kuRDtUi$Miq?`qAn@w*3=b?(h!jro<1 z9Goa(-!{9caLLr_6I>{@Yko2&sqDWX#PpZqfsuik>EA_YNNvMugAKuVMctu<{;((r zFb<$kW&=~-DAu{9>Tzhyg#amGRjEi=QSS3)jZ{EUy(Rm1BKU7AJ9 z7>gGYoxI<%k$qzp4lZ=Uv6MteW1Vw@k(7!`UQBS3DAM*xo-N;JGCQm#aG_b$`e3rpI8}rkk zlQpO*uf>a@|JeAQ6?WAEr$Y*z@0^r7+TA$Ymij>ejNh@s#a_mx%iLB~H1yM;4FMwv z`Xa#$Fg(*|!m9ihE~cRx1xYuIA`#Lsv%w*GS!1?7Woj5+%3K*#f~JxR(4xa_;vtG) zzSvFel!-JwW(y3nW)_v$7wHRf+qd`j86t^Eudp<2%!U6bK8f12!rKApzWzc)j} z84h?)-aJRwagWzw3|vZq<0&nv6Vqqf@-BQZs*^vYmMm4(%vfwnTqd^r(Yos6<0*M7 zP4O{97=K)_R7LU9(agQ7yTvtL!zv^ReWHUW`&O$Ckg88U z{;u-8BAY5BLSoXGXm_8#xiPg|s@07>eN!)ub3f>*bFwx3gN}k6p^)>)XweETDT34_ zbtosyZ|g@NKWnPE$?DpI-UXLe>d?Qp%`(_cw`$l0LHJeKL$~w&oBXLmeT4ifKPCSpYkXn^`8b`&n(qotpusDzdoeyULAbn5SH3Uo9Je3lflp1gCBO^ssL2*@k!s zo_PgXDr!e-$;8^iS$@=*3%i8sa|!?AN-(kf@7=%u^5!@={(b75Qj?AShgklZ z2e_rc6?xE}-_EdMlZZo;-OqA!Rv@XS6-Z%A*tGrj4bx8{-4F$~3BZF%U^=;*>P#nu zTqg?JuGX_vyWo~o2z4&zSm!B7+LfV9I)rHJgY+a|82m{x*wd%n0R!3gCr zv_#u-J2I@v!F5Yk+HAd9# z33tj8?0`+4B;o~PO;y#zoQ{YDWG(`d2u=j~d5ZW!LIN3LaGR7Ld?LV?4SF;t7ARs| zr9b^MLmU9~)V`(Xpyu$W6=rh7sOINtchFv*Vt|t4(}^5i6~?gIix&ocpacTV2C=E5 zd)fBMD4xo;E(`f6?q(z+WB%;dw~|Mj9=m`^=cu;O-R$DSGYE=VT1F!gN&AwqB6~iP z-IK!elQP9z2s6lMz~&*GX#=!U`ukN&cO1W_zXsWKIaD4OY9ABGaM9xzP)QR$H1nuM zDRyf1gKl;B=gUCe)?pi-`<*Kshg_@CT*sVXSYmIdQ$wBefm*DclI)+ab&;tE(*hyN z>0)@hxp$2e-3_5cN9ah10}z%pr{Po<;u9;zn&o0S*Wxa^1PB4u2vBtLyb%%z-s6^X zh-2PC7R9X6;GELHawcU11ws={JB5u_FXsl<)#}zuzF&S>bJXQ-N=(lB!VK9w#{+U5 zl8A7Ok=KrQH@_nYpGQDQ(j=K#f0Y|GnE<~ajp1g>d+|I*V(&|R{X(vlvk3him%s2S z9&W^uG4}T&}HDHZAPOsYEO!GqQAzR=hc)iKS=D6mR z74JJA(IYYRG6WW$r@(`bX5E}8KI+)sEqKq{vD;JP_R}EGJ}44noo~^l4EM#4DgyB& z+dR+JBS>{)NmTwk-l=vj=_f~9A>Yh2yJUE&rCvgVuii*!6Fkf1x}FK47foHA^X$k$ zBki-AMSCf|Dp8P`KH2^_UtIXU*oXo_y!E_mFY)qi=(OT1`gQ07_V~O}8oS;vOXI~O zpu$1St#V!Rg=-M-s|XQ5LL#X#BoHsJ2vK*|2tZi&(*V+y1kWWh1iy=UZT-|~u{0Bg zY^R>jzeYRUD#vLdLb(b4fJ!%Pqc_DBFf^b;+w!wp<8D+kwd6Y1>lNoSz8lyFBNKf1 z0!>3CvgoAQTXu18RPb5f1$_>uV7u)~;YTR2*Ih(8Fq)%^u)UgkhY!{2tnC zr8EU#QDEKW(wc7IhLsD9lNg^3bs#nOurA1B_~|e1@-#M?h#cFt<7J@$gUUXnY$a|9 zogkUf`x3|`#-K!G!P`eM?4u3fXM=VY%Me+<-t>4j1g)Ee?GJPlAv&tWi>FVDFx*6< z396fp`kHczEM^@58cepzYLxfVJ1VD!{2d2jyshy*;+P@?Tmd`VDhG@0CibkC23 zRwTWe$A}UaKdc3E&YFA&ta5`iHUw5DLnEq_^hyLabE74HGPD;p4Vd;E5$Ant=-NS!fLim+zo8yRTyI z)_FqCp4JLJH(qD9C?;DebFEyrO9uZ?M86~PPE+Xj50-#on$A$Us<1gv#gZ<;fy2B( ziRdp!>+l8Uh*6%MGcY?R4ge>)V)xF))Hzz@7Uo?U&%gizH#c(YBGMp|{{f9iw~i`+ zz~E&SdjjMfnOv9-fV>w>0z)Zyd>PW;-Fu&cc-{*ajFr*SeP*8 zb}TxppvlnMmXzy9=rifbXmnqIRHx2vTZe{8ml?C;x%A1?Zut_5xz-8_&yfNBs{-Sal}>^I zNSuY^$L0YX@% zbGKONfk{vZKCbhDE^xqr`U2@u&%7O?MYf#E{^{Y#QZE`F{wXgVmhc-Kn?f4+Un!FD zpE<|>a}xdkZq$j5{eO)*F>u(X_S-|XBn(vh#b})L_RbK!0 zM`JodBObmS0UWYdr7_X`*hvH~FKw=M}R9hBB2enTV;C=vunuRy^rVToC&iVRd&oFb38 z+$jOsWH9;|O>ld{Et*e7;H9F=IG{5z0#zDP9&3g*K?!2K!iTu)phESEDiq zxPAhu^F3nBPwwTNQMZe@cr`Z|Qc%}`_Q);K(1c*4Q{huDN*@EZfauG?n$dfKe!F`0 z$K6`ph2HZI%~tYr>QDF0ox!I#|9Os4iC;I5I25V3?;`Kb3_7~`!naRe_+Bagd*Z@f z;t>C}YA<~4EVD(P$bE75u+0H;S?xalAp524d*8MSxVJQcK4Nn0YKP&zFYH*OtwdKM zp{MQ3!J7|YbPbpji^PfyL%E+^vJcLc`GOI~ULPGBTsk)`K zv)+Y2XqvKP8%hfa`}h;*114hI<57QJ#-e1s7l4aAert!KY%>o%jL$V&)M&L69<7|6 zhx%;k0O5-Vl7z?m}Iqt=Cd-chJ5hoZ|MIPXq5{-!=?t{}xaN zTl!h3o;kL(;qLA23H1Ez62;9o2x#FH+7?BlpGfE7r1DW3JkSwj0uxR!2a(7)3q!i& zSI(1vuH1+GE&&xDrQ;F4*lzH(kU-cSJe%a)w0-`2)B@_Xk_Odl_4k{hT>F*NaL2SCjs>l?AO3Gh1{6upNR#^&r8>CEP1O3(bB_qE;msjZo-W^CC>{hKPLA1 zfx7kZlE5l06=CS|`46@NTUg(xR!_B=_&aUvuUqwIkaJbahY3)kj87`{^ThGz}oHm>K6H15jxizNTG zB@!8+*dZhnWp)um_PMLl!J?eiKiI{u!>wf(HOJDBUj{0YH%rzqvQx%LASSaNa8$H- zzhayA;c`a$lHImhCF=E;Q%l>-OLI7=)K2$RXLJ}-BXnb}iifn~rQz1&pNVY~ZDBl< z=u(1{tq=~ht^=MY48$RSUq88ZWe_!~FO*!WvX;Z|p{=6K44f^-(k(n4Tm@>(UrYQRcmP8b>8Y8Cz=uv$kmtPWCWTnkMe zA-8>?bNW*f+O;U#S=&eYQsuYxjyHt$QuU3>_o3Hn^)_oG@Jy=I3+DL>WwB$@u)0jm zd&>)E?tlU%Wb_DPmKn1(VX5N_?Wa_g|vw28zy}-@#V5; z-eqa)MuZ$4gHxne{3zuLL5b^xNq&?3p2Qm;Y^Ds} zDKxcR=uUQ_(+5|AgmC}kQfMaS72MhIs46obHIQR5{%$K>`F&Mk1M>57OnB}Ih?v{5}ux?2vavV*gvV>3Ef|B zpF$UPqmJiwI(t2R6lz`kcpmyQnrV=Ppg-e*fc&G1@~M`r!v!+2vxfT1L{x8MC}`tH zcEfpT{5!QkcVaW3d*c^Rc&{LWB0kXsx*2)4Yn$`+t?1T<#&8R}n& zW2zPcffNC!+(=|gr`F4CKaKkuZ^M1yJ&gQ3hx2`LZC$g2E-M!X>}oKYw%3;cwI&RLY3L67GLC zRRWCR7V8e-1`QDEA7^k+*k`CSyFa=6H)x$i$5(T6x#quRx}jfmzKi(8=|t?W z$lZ#y))0hvZOW$Hli^s^>y{sb{}1JFFk-M#J;kai18txr)z} zq^caWJCeSq;I_MC2hRrEH5{_q2gSV-R9f$yh^cmQ?tmvNVJ^_3B=P!@kR){Sa^s+r z6~PEa5NFBh$iym&#D+l?PvWP-qP(=)M%+baLzegk&E8~A#grNfxeNuXhiT-=VeCPE z@lQuQy#rh|oCGS#?BD9^g?+0Ua7bwyIc3d)C}SKz4#5y~C{)XMg)X}M+4*pvnDz12 z&tM-od14&l-}F8_`PVRFX87ALiOh`uej`Cc+j*Z2#qUJjqlA7|6GgJw=d3xK5U}1v z0%Fj`jC^YhLpwm57+K#bJ^Q&uy_?h^m{HR09SKGAgnQ?W1Q!=l3K~-C1Xkk{NG8GT z-g%pY6`R~wH6;!%JfCPROBxHLy+W#@1VDB;;Y^}ss-d_k#$wjW_z!#2GW$b8aAJ@F zj7ix62#Ay|Dj?{|v+qh_y5maA0jg;{Y8xLi04j_8JBSnnFfgGK0G0rolK^a<8nz%r zCb`^ff9)Bw7g7oB$D!Y{Q0>_e%l((d+1#pB+JKn}`3`St2l&JwyZIC_Xeil58+`RI zvBgR7@iWBfX!rmC$56q3mr8S|?Kry)s?z&JZgaTomU(}taSa*E=zNxZQrrk z`&%S^EcYzWesS-8I~}pu7ZUQF=8mL;0h4BQ?zR{GkEvZ9=b!m)Ki7I zSb@%My*g=#?rwe9ciwYdG@Yzl%3alg&cGy7CB&*LqL#gGANlidNbSWZ+Bwz!iIV*x zlvD2(?()rvj5dH^>E+Cw^p_&B?`EpyrG{yVd&7V{`sI1xYT;>{T^zQ?R%vrcANEy! zfT_dFn4)ZUk&#oJdE$ z*M=?831b9(?l5dgl(5c?CNbO(@RG2dK0mo+TEE+TMg$Bjy5JcN#4x?GIYSAHJ6b_# z>ykP&F}q!z7cdp$VOvBf5Uy6NAE7KR@+K@obEbZad|qmQZayN|`=T17q~Fp&+wtXP zy5Z-18$%(%9MFfnq!t>VOzetS5{a$n1HBe<7WTe(4Z04)3`!fOE(ImBSl-R}%e1`4 zXSCm{QAKrpU$u+JC#$-^q&)BI9w`JH7Dpc9S(}XdlLTl8T!357E0*~nK+&8fH?2%27E^5}R<^8z#w|FR|uVrHYgIx>MO*77CiR1*6s#Cwf2p zXNzCMTJ>g)1|cwCk27_6TIYH^aWZODBcxzD;xWy$LK%{MVcn@PO|$|gj;vvjAw%i=_u|zh0hjEl2V6>gtroRv_%ilV;Y@Gi#;ZA97 zDQ8I_`0w-tl_u$BBOfC(xT~9PTBI|NVXkccN^KXyNUlIl2wZw~`1yc^xdhs%?HJec zlmPWMe}7ov<%Ml_HC|i3JH0Y_d=KA9iR2+HV{L23!EO`Mh!KzLT_$OybFW?f;_|dt z{6aPrx}h!;pHsQMMjY9~B=5VF8&1y^mCT~Y?aGYmj;+sePT z^Y^y5jLEU)MWMc-8K&HiIzK6Q<>SI$bERd44&(`Iccldtd)AR1p$xXx3%~HC+Ofgo z$B+Fp!E3m|y`$oCV_vUgv3k+<5fakebYg*s%8gFsWoF&CJW7Ed4P#|ZSfhV~)=$wS(g zKuDxH5Irbe2@Cf)mPPyCFOsz;s4U-Ds0`oAW@cN?oJl(2@>xaC0vuP4c*@rwpCp$) zvP0(-aGjcp<&p&r4ysKWlQR zxE5s}rjsKyj1MG?aXJ{)dkX2eL#DWA!6!#oJwLSix`m zM3u;4)dZP*EvM|s{o6?X=>EuGGl^h}T1vR#r*;5!7vskb@TFa&_c_6T;3X-v$&APl z4lqX9&=vQV8>(=Zg0NB6op|f6O#KnCYaAnHs!J3BmY*yWia!vvfe$ra0lc4YvO zlM>ocX9Nk*%{XomgZklI=p9oil0L3~>E_}F1N$Q7zZSzvcJt1_K@nyl_QEI&s-e1O z=Zu<8bBT5}EFT8hnYhhXz;7heGSZ<-~i(>V+#bZ~pr=*iDHdi0{ z!)>C6Bj_@m&zpaZUqX_A%z_JcJ{VmsMY0;O5g1p^LV!yVguxhlPFREyhwYInJa6!@ zzs)`hAe@jYvyLL#X`KrY=rmT+D^ouD5~T>TNw!z5N_@(pn9tT3yssqILfOfoR{w#EMAtCUjfn$e46T_9jo{DTZ>b*X_KRBy#t-_ksgM` zN@Io@^FI&{VJAi_(7(I3>W#_cAMC1;IxlrKO?QsS~~xPNGrRHMPC(llsS zf{=Gf1l;z#Zg~D$pjhKAJa0``8V7%TsKO6Z{ZJ}5prh>~03=);#~OGf>6X)T^-_be zlkx-Rh}fs-x@z@SRSn|Ob~3K+<1R*0Rhi#bJpA@+LU4!K?C$(TLT4s9`2#rttYn&^fLi0><=4{8IzM>s=`Gj@^IbhN-K*$#v- zwaF~D#Rbii1T!_NO{$FE<9?W0!(w_+zE()IGeO2Xy7~Bc3OTwckyCHmP*S!o^TDM= zE!IS#dGxgk)G!hJ<)}#&q@TO&kUVt4m4vm+GlqS@fX!wL>+|gbBZ2 z^K2cYzBlm}AzW2y7XwRCn7Nu8q)UO{2(3#Z^UCZ}fO9VL7AM-^f&8Gz7ggEu>P-LB z90qZWOV5w>(0Fvg?}p&6*?{&y*rESV=dxnz#wuTrcat^@`J$)RI@~IX6QnGgKhKQVNBqX&;;H^vux#agoGEYS~OY;^u-iY#uq zKv$>pqpGZye#(q&qus*_0#6z+Ya%n)jaDdYVQ_*3`*Bm&e9!MRz?fU9+cqw1#gdx>3x7oC`n1`I=~4IMTiq7Yn2;_}RKw zNZu!P?*O)`>)iZ!O`aOSgmxFN{0S7JxPM7@Y=0@z8Cm|BnfxE?zaQk<()_V6kU;s_ z>IphbfYv+b0GGr^^J3N65PT7Wx; zO7e|m8#uJw^ub#~Oxog%_Tl$(IopK7piLsqTt-aM&tjDQ29JFTg@P4LjMw{N>#T4M zZ92g+k`jQV4aNd9AenzHf4+s4V%z9QAW)DMeven+lf+U3TvmC$l+w3qVNGKXt|RDO zR3)~D5CkwwDGMI#U&DsYMl_4mA%<|EnKbB$3n~s^)YHY(Su6?z3sm?H@oHw?voD4s zX}l!&j{c%K%bfDMZ`ta&fcf~^Gp%u6!Gh`0udbE&#~v^s3O0sLOTikzJK72`n7k(7 zXNb2}U=$n$;3CsOSjUDl-(Pd-x8=FmbeHGe%6$0F@T@GO_J%e@!il{m71?@hZtij1 zUd`Sp-%Z@0SKRejkk>BS7Z!aK_n&uclm+2b7<{0BM$H_q+w(xi=dt@g7<;E6QGh7R zw(PoP+qP}nwr$(CZQHhQ*|u$KZp2Ja^o#Cz(-HY`@;g5c_Sz?t%GF5c8?XIC_gx)C zO%6_+#&&2Yr^F;Ot;u7Om@|wf&JPuj)>;PbpW(%2nPjJMQ;XZKrE_q5ngY+L1$

zz~9@oPpo+zbM7~yv_axBr^Ch4jULkUqlU{IzaCzFKP#O$k>k&x6K8{dPG|Jrp5ej` zGQqN&%y>%L;W%rWrXUy)l`yx5kAR?UKZb7J)n>xOj?asZWh$mY2m?$-J4`LAuM4!P ze2Rd+r>0pzd*?^ESy$2v46WGdxkPk;HUbkDo!33$*`CUK5sV@S9^{!c&H*A5O{eW9 zV!`4IBsz{WP~_fg&3IqRa`(}MB+yxJ9RVz7l`fEIrL@^ z-6TGhRwDw`nXZERTQc>hwTHc4PkMj7s}KsGDG z$}JY%#Ebjm)SDH(!n769!Xykx>9^k(SXD$?gf~gfflo&w&;DduYIvn03xJ+l9bPEX zj_P@jq2gE=?36YN<@cM)P=wevcMup7Tdp$C5IC3S9)}Wg+lRPU<6VmQu0W_=+Rf+E zsx$r6AQaUz(dN)D1(imT?Uvqr%AvJc5h1g^cKWTH_Z+t0t5)1H_%(|fAgdpip9asn zzEe+BDOZq_Rwzl)Uq6MOccj-%G_3>UmG1Ux_^Q-0MNvSW7^^$G4IWISPq>YD=Y{3S=8y;uHajmKS~jknkAWt@qiyd<_Il)Fa=u9hf1&uvVW6 zJ*h!=-`;rIw3_#1(RC<-ONWC12Qb=YU^)R%+3?6Nb_IMEY(Yk!(dCg96J-OvUf?7| zbsY;uI)1HM{<1-;hM&E*lpS$E<&Qv^jubVjaNYwwn7qiR_rxTx2x9)3@TAYcB0WAa z4lZ4}7%&yDRU%wskvq4~@vNDzPRPUTss;CGN8oykF4)Jox1J^qGPSh~df-=uo>|E#6| zA8?R~iRFJhkMB_$kR76j={cqHmL|^RkVt9~8&w|x5f5_AbVZj!PwG^425s#l)A7c?3^Gr`j+oO4pWRe`b5|k z3n{Q_o%n~3-xaJNFnnwj*aIM#pJ+^-wZ};6B0<$>40$1KWGbh*8UpBVW}~bvBG4hfD-q>UEG3+e|6o;nF739TRD7&_fN$O&z)TB>dswQRDY1#+p@rPTWBw3^N)m^ScaTe(<+OzrPbT%kZ#iU!YSA-o3)0M@4eIG`)|2*jZ|6v_C=sEr`>%hpt z@_)$B|97djtYs62-3I&9+b4*(Nyn*BEQ~-8bOdS(P0XKJ%&#>>e$v8X`3Cfq*40aOz|Z7_`A6dZn4n}@MF^^+6+du5(2BqcY8ZnEbRiO96{9Jc0d!Fr zh-``qJ!*Clf5f%Jo;=3hPM{-XR3PiOBQ%vtH$h)Q$QD0OX#n)h>7I;39zlA9N_pCz zAV8CAi(Mwn!ZP&6*0JV zf(61ZNhj8Zaj9U_7}^jXL0Ra2BAYx}8f=`X%UmLHc;PK3=^cA)7hv64K2c(971H#FK@ z3#S&fK+Kl}BuxgN!}F(@h7eLU$>+w>m7I4E#jU!cIhcV4gtgFe^fLWuV3U3Qfg-=E zl6hDOsMQ?G;V6t9J#j%Y;tn0C+IpWJWo`Szj2e0+6+R#s1;yK*VY{We0GLH#vqAue z{LBx`3%}r-YKXubDFIBJcoQ8_uK=v*XuX;`V%JQR-oU~X-FOWOl|NOtDK8aS*=1bg z<&q2+Q)x$ZGRY@Xo74cdt5-0Kk%s;Sh+jNT6_TwyX_XQ~JIv5s1SILe#+FGd+a1eE zOk`KW8)7?)5VB*;8;be8>6c_J)3243#p}_;%|X^3wNM1b7d-9HS6ZK7Zh0?^h*3a6 zujl8(@#DXC+uM=$RDB-_e3~TcrV4yohQ;y|kJ~&FcJMT^gT6uN%(T_q{!HjBQNy{6 zJ(!k4>}|TsDNnbz6G|>OII4_ZJn?5m$$_iL_i#5L;Kokhfn#@zpOLz8*MDc^wT`X~ zFRkj1THE_~deQ!V@nKS>{e4O9_s3%ZFSL)YE2{2({djp93r_jx1ijet?!oB z*PBb%=5@E%{dsnKL@llE^!WKD*9Fx_~PN=0&kbr4^vmqr|Ii*q}khzgO1Mc z@}jdvv$C&NwZ+CntI+&IulnU>%NDc}8OiX>NA)H4a;&1e&lh($PMuHoBw7FXwr7k=@c{%G`bdcCReZVheIfvfrvBu}Nfq1tuLnn$R zj}QKFJLo-rsg_uaiZY|@VM4nIT-uN=m^oA)7J?Z+TS+e}0`3w4DNZEdwv+lbSgc3` z3F%~(?87u3qe9x}N&|vEpq{hj3AJWgYdT|^n-jGe{AF0Z-M1hrKZjxkSREuDYuua7BM>dzglc?7#Ag2VPu_iuQSIQ zGQmm<<&F-hwkZ8Q@u65Eu#M7P&^B`Dug`6f&=Ma;=0o*pC*?GLjaPlsab%kD(}}WW0pSdnMt=x#NNR0GP^0`G{Vc! zN+v1*>3iJL)v3*-3Xh(NHoHWKGz1YK+01R97NcBf4h`B~@E%KXP*=!G(JwCOHr_&0 z;H-%W(;6eQK?uM{bYQ2UsK2BnX!%5wWEF(4}43rp;Z{eCFp6e2PK-~ z!R!V%ch{?0U3`{75yfVO{(6DM3Ww&!gzhAK6m3(6;uxEH?mmi}zrS6SWvq|FH!=vu z4`US4cb)@K%GQzEGQ))E*w{gn8p<;CN(_7G9okO~NqtGP;wqboaHzq@5qZXGvLx|`*6xMxD?4agpe#v)>JWsS)k1{k7Bo>s;!qw-am*fUg(n|F zJxn7VFI*5&n6v}9T)JY)21)H)Fa(X}UvhsozHjzE>>X*Z=$Q1Zc`?O;XL(gj|d@ZpaMPogine0UI*X%gcik zxr^~-U2q9+$d78oK*)|Uf;r3Y;YBW+ldNizVj`5wI}cu#ayBci@J=xpxIlLcVV_!t z#Jm-3qbhLV&VDr3!;Tw-S3<{FNXG*KE)RIhEOyECeKy!`W)REo%6cQpgFto2SKglT zeIF6%4 zC@%G4|IjriG= z^@fqE;AxtDFQLj~UEI1hC7pK3*B5*aMtZ)T@421m-UhsJz@!YFeE7PT1f4)tulYSX zj%%~ZjXibf$DhFI$Cq~X=W8ia@G!SqeFZ3gA}zcExNQhzxW<>^96c+YRO1|3fO~wK zzf|;RLGH27Wxg?#cjCCb>~1e59*F(1{DCRyf0jGzUggHOgWo+MC{iZRivVXMulfuj zS|Z}tgB*;#uUh=eFy^!@1i{6t3V$Z*`TMxVOAg0OaMf&#rH1Egb zApgmD2S!9`b_d;0_YM7d-CU+aG+j{j;@XTWD* zW?=n~YM&9Gm7az1KW_iJx&H|9+2|Sm$8A828@O`P<^twN7Bz}*?tx5%DPmp*5CB8U9Nf0sxr6e7Yp8Raj>(;N{<)`Y3C4p4 zY||>%OqScfdh$BKm7awdXc7(;Kmstu#f4=6A0L948UP3qkewrDUtMi&*B79S0wyMa z2tn~TKwfkRU%gunG;jpiB>^IT1y~JV9UTHS2`EY`fS;cLUi`rhACU%BIl#UDI-nDX zpN1GH6wscMNMXmky$A`lZ)P`+-o|=NUQC206m zh#TKtEgT2;uF3^MUS=KuVnFWAj28wOR?L6_2)+GsBsvhytl!wpoNw(8xgI z;Sdtx0D3q4Dd-Dg_Xht4HmDaWh+g|cv%5zD0tJ5XFLZjoc3_xa;JX2SZhe0055TF} zQ$FC|W&nNqIov-ZK-c=Q_8@z^%lEeFLv~nxKj!Udb3nmmc<2zFZ(o-aP_y)2#DmM9 zyLWnG)aK4|*R_chyLkz}D9Vb0o`61YAtC->f`$0_=){D8$YXqO-%T?*5MOe5zX??l z_WVF}kvdONyXAdeFKFa3FvPlC_%G80Y6ls zY8XqPelhxYTVFVV`ge&#Kb+&xSfOake4p|n{0T2;7f6UGz=Ct;;cNhYZ|+jaXTYPA zOSmV`QQQ0ifFOuba)1YBFTkAm^Zrpms7OFioVr^kZ#MnlzMuU30;^G^wAjDuupa<1 zqiv5-q;IM}t$vVrV2^HjL5Kr#Cuek4+%$^HHztm+ak^sIDSUn_Z@$vcCPdT$c=<8w8~0QxPgWG1{6svZ~39<1LvL3nNq?Pu~d&EhcH zk{S~voGckqt1%N{Y+>um(olOZ1LvyRI?B}FINcr(dVTV;Cp49D)znC8E8U_=`#CKi!kwI498qmxJ>! zABgAf_R!jJZk&*>d^TqV%G*B7yu)>zD1QUcAh3zd?Nt=me+whg>Ey{#?J9kom|#j= zjKIGIr5J1%oA`iAlJWU&Slo=M;mu<_f!2@>i?)%|Ua=mF-bbr2#QF6sC=z0clj6T$ zIjx-3))O%;%BEhixJIdBy*PC_6;D6kN>Z1CK92FkfzhtoWo;Y&{uOW6&dYiC1Z?by z?XC-*k2{5wrQF+UMBA`^h+gs1U@awRD?4a=&9Ua>>iyJxXi2SWQPDsBJQj#0Sry;x zcde1p(3~acZLN`I7;%O3;N-pqwGp6c=bw?-t(t}$?t#MrY_^b%7KJ5{>k!BNn9rYi z6Jx_BtqzD!g2duyYpQ~narQBTHE3^|8?{6NRw^&wCmDV(9VW{f0L3H*_rQHEHKPo{ z1=Yo5^%$+#F^w`BA5=t>h)dc?hFKT zTLyJ6>esj4Y0~<0uwz8l3KTofZHu{3dH|IW*5l;|PlwgJKc`IhxUKPdddTo6O?35} zLpDo??GII@^90FHZGLwO7A<^EK$tX>n8oOj+W_w^kVVEByaz(u?rFKq`x-_crnLh; z?DrE(-4vOinR60VcMr~-T`o<>l3ugD_g#&xt}Ji7t7XRu`>he)Lso&==vpB%el!iz zN;4?@7HOQhu93;Pe*P=(`-b~89XlON7pKV&bNPF!dw(kztNXzIT3wE*3vomlqjKQd zxcwCO`X^Y7G-|2pIETh=rwK!OMr6~sWVM8=(|BOqmV30muEhwG3ER;ZlzDj5(k-Or zN9ea19+@XXhj`}rIHwv4XKFg z+61K5?adBKVS<*)#@w?C7J$Cm&1qKN=s3bUkS^-RC>!wD4k%z!n?iFj_Bp8#b$p@! zg}=1|@V`P+5oR5B%7^iFNzA)H>{MP!W>k`p!4|9ere+AjI^2h!f9}euXIh?siX6MK zovzV|wrk`AHRoqx$g6X3BC}0M$gA=1s^jZn4}{zXC+YUI_dZv*i%tS=p)b%ZG)a`L z^2rWjQ1g|GQQq8I5=84k#Ysgb4x-xK4C5KZyCJ2n9j+>C|&p zw%K6zd*~Edj2A-+&#*2obDjA&Q0np<2cw9yPR}5;k~pfF{5z0&-iL2j=Dig zZ};D5E2!*cs#8f*Nku<9Ak}hc6!>J~dSgOLus-qbw)s zRa}c@rbe8EhlW>%E`GrW>N5wXpg$HWfXo$m*vuYgG}!1SkS-QyA!F|BTE5&=Ws=T* zy1I3ybbLj)JV{-Dg;!7bX&_e;$0jEme zO#jH(y#2O}l0?2O4@*O#Iwv*W-rBa`&|Js&%7mLAueX)YDkaB>)pD;;xIwkr>M!_{ z?>+C$Y9=icAw!x-Bd;kpu2a(>%_Hw$ed9xn#gAm!!sclq{~m$JR8lb?C&|+u-kUg> zC)>~)t7h-!ijE*y5Y;-od&?XGkA}$Ad1~v-lK-jVZ#3=C3wQ34NL{> zJ3P17f4|KoP8ApFUrcbh=2IoGr`zbPj;^EWwva_V&gBlG&xsF9Rk9$Ur=M`%%M?jD z3n{2rRurmWR`D^5t=q<_9YD+KDnP`>)&f;>WF)*B2N1aS2JjCnjg@j16%_24Z1lAI z&t?=a+;%HGua1GtNIsw8mDU}%itm)W?t@ePCM!i;thU#^3^tYGx|xuHaEu*AR+p|k zPI~*zHoU&pTArGp|2A3@Xuo{o-4BF-7yw`pF;KV9v{wA(~pB)r7Sb-hGs=w%`Xz7Y1A zc09Y+L{Z$A^E5gZtApH+;JeDdm#=z!A(yqMxB650bd#HWh3 z!N)gXTW2fcNa%{xC3fpg_xkQqe5T-Qk(!(=&CW$m8ywkAO53nLwpD0?a$*II^sDhT z@7v{Gkri?c8-f?TVXZY3P)1$E4SK+P)BWKI3|#UiRk&9kltEzYc;$#%>s68aSaIy+ z13niQl%TTgHQ{^qBr0n3oNw_L?s4l#iR(J?DGAs}>x)omp_;*qe%;uhZR3=JRD|Eb zZ`VV@viCJr9G>u^9<_dVDAToYVQ`?-E%h@xwq*v79Pgmc?=jnMLc$sZr^^URLo?^W zo3(i3_~UJ&xW;pb)8tymvB@!fOVR(pqAKKZ_@MfWpw)@bZ{h&@)|j^i{^wG&Gf`HV z^07Fu!^P-r>9xgQjKXotoiDp9-S?t^Q3G?gt&KW{I_VW_Rvw$b7Ed|e@UP~d zeiy0yZjS=7`SwGNH zmGc47?6FN^z;ks@`G9Ce;>uT4Be%h_Bjzw7<5l)rh&62yX0!@4GC>!WvWMDM5350f z{_oAu$5X8n>rzmO3T%t%c$gQj{ZuYIF+MNe`Mz>*P1HQJV8kb*u7tUxXVfN@+(K&kBvQI}A zWTgrLGo%QMgyQL$O~t4?sL~aA`5zx5m6vVh9Ar{1T3u3~@T?Jm(O`dWI<9%GkPJ4U zUZXeedumE>OcJ%|W_UIVF<-N1%OMSq79Hcvz>qb@FjYlBCFvDwRC}ftFa?hZ>MDgseMCytU_vKwYqK+Z-~hsdZn=zmE%AAIiOv$nRS0Q4?Tw{b@#DyZ_I4`E$#8SrAHBZqG0mCF~{?xJgDSbaXvMQaUHhRCV3NaWyH^bUSJxZzYe}$X_ zFWZqJ4Go}$7It`JOYHoCI6<=m-V_Y-(VDuAJ2hR$Yfd{yh%4}=b#Ws~Ru#|)TTC%J$98&{K(@_<^jLV0d%Ht#^x zO0nszQF~*uC8*kDbM8rhVtw60EDw8$_I{v%%znHF9^xXs@xs!1xzy_R9W%3T(qcAy ztP-c%lEK8(Vfp4t_%NS}EqH{DidP8QLn=R51Co_@lfg~l0!LVJNb)az1Lxt8D<+d< zia$NM5*@lLq*GCgsi{D}>gYsXBg2Dva|JDg-p_|;2SX6t?$1Ge>`i#`wWe8ZT;jFJ z#01&)#p`QE&q#&o;yAK!!dc3l2SX| zazAO0%KXZ1U!p=i9vmz;bc_U?H!TpnMp6yawne4ve6J@OttiT1c z$qH>W__}&1>pVZh2n?U_-&aNpC$HDHwn0FPx{dT`pmHB|V5JOA6*>F3B#LlJA1E2Q z0f8yBR6#S!Kz9@MeC5c$ncHfAYSTK25`yyyhSH5>l-&I0xgzm}0(FJu)0W#B3$9&j zt837e;2;SkxL+u*N%|FOh1l`3ny;3n4WG}$;2aQ@4@Aw8 z)y!GMf+u$#v_eQ4I}4l1!)^KBE|amG+diudddV!hTv77Y7AR`t6e8^$rN)QN>rmSq-ujHKVTWT z8;aGRT1&f$E=`cO?+1gAOsqe@kQjU#>CH+iNFd+g-}h#zD2eHeAPzLBac@1Vh-F%J zT$!jEJ96~VKsn^@pN|SwnsxH2FN1~fd*gAZsC)rytc{jv_IX7>YgOz*)b!5zVt5dV zNni=AA4;(-(%y(~q^+ z4gWw}rq6J004|bA=SQL(7Rm13wvwLC`HD5u7nhkyf0?aunognY-CZx8bNg>RR;%c| z>}|XmYE6Vex2m7t@CFU}8)o3pwkV3`xuKn;CsnUkXI6LPyL?vcvLL^dF!qqV$#Jq} z8O_4j)rIicnOB~a|(hW;=b z=)(}BOArbfN^6^*O*4Xpb+HZB1ml~QF#mRBKV|PZ<74bl=uvdEdjU`k(#C}|%Pv1N zD*$O+M>|1d?sWjLU74;z1A3R$q0&`GYI7FS$Z&Rcmj1?Iw4_EhZg@@!Ym+lVTha8D zuuF5{FhDAH7W%^Z>bQ_-5Tb?7Ojm^+!PoA6T3k-@K!W#MFLwA+h2(uy^MjLw{8t2jGlMYdlh(bojY^E*p*9Y9s#kw9zXIw6 z1pbir^M!cxqIS8KPN~m`OJqM3ll8acSyq`1FXYX~-*SeDkui#t(EI#laL&D&;<_^@ zvV$GO^*wHi#0BaZ?P6)yi=Cu$&Oz&FXz zw%d2X6RjHJroDWBvv!od*Ak{XzAL*wW}Sz?M^P`8%1$<@RKV*1s@2ok8Besobl~Sd zazQH!RY3`@#wm_(v(bf{rAeGIL72Dg;Fz@m zd>Tjn!EPx%Jc(Ts{7^d*B89;viO|ewpY6Ea))iLKu8ra3TT`+&iC6(+;5#zkNX%Jb zBr7cml$?+{1Z~+A=i=v{Ak5e<$(%*Nt!gBt9ng|BuAS^ndZb|19yb za{R{^vHx$e=Vf%4)jf6?fm5i5^usun=4Sf}B_so){z< zto#g9E6^VRUtSpk0-0d{h&jLrzP|68INOvSju|^7`3EjI5*#LaU_*HTomw6(1Z3+` z7=XVJAikYhTo4liBpe_>(GOSwcL6}99t|7npJ8)Lh`_)cQ5Ge+s}6i?0wbvA@s-3M zd=MHyLP7%K>kl}2#{l;pJUwDQ^eFq#Ry_)VK1e@0XuuGC@2~g((Pi{NyA(9EmzNiG z!1kOVIUJdXE}%af_8|;?V1WUyENo&TJ=WE%xgc>i0FoK|2VEG$UxY*07k|Kd zFc54Yp~41&TygR#VE>vw^eYR1XI(?_egQ5&Ko9^w)_(wqK|a(v`R4l&2NL>%2H+w7 zPUA#Bg%ITc{8PtZ^6P4eg6{_)0Q$wx=q!&+Hna87{n6zmwY6bD{CNQSz42!T`=HX_I){9@ z{IVLDKt8&Pwg6+-81w_|#n4~EhVfuu0s-l9bL;tkf1SUaM1X(*^X(zP_5hp$i6nk< zaI8W(ep*Iz`@pxr^+AUh;6MO=KE5vhf=$wsLq*(uvwgiHKxb82Y_~C={xUuEW&iz4 zj_2Q(ACAl~FNqBS5Ws%`013&!zsL88?!WK%@fN2}Q%nSf|E$)v=JU~IQpbnA_f7<_ z+t258UQj<30_grD<7}0W4j=dp^qqJ9!*%pK_MoTnqgMFqCU%hvF>J>-tLOha2Im?? z($Z3E<1JOwZ(*2o+6RR5b z*`E()4>SBuxAJAe_FcjTf(^;UU$EbIL%&9jf7j=&o*n zAmA4vBP@*#@Nx(6nW#UD*@X!F7F1suJm~G4gn>^TENoCu0B{u@03enOK2aBh0tyi{ zzm~CYu6D)2{_B|dRRl1+I0RhPx+~qU`s?+rwLzZ_2P4SH7Zo@j+|>x0 zj@|O3a_loOSYRhsm#tqdk6g6aK75$2QrTlHgbL+F?{J0(k5rI4Ze5#kL<65wK zD`f+`1wc}kY>gqE?q2d$YqKSmYK=XaZXjj#7sL{-N?HzyX7OHXOYAO~={S}>)ULNm z6;fjekFR$I=gg1VQ@wawi%1toV#t2+7FX*>{4YMRjpI#^Df6GS#lH`oUdW{Rw&G!S=q270 z`IG8^gX}+MH_PFKP@eba>VP26I=6MsWeO!GW~rR*&@v9ea6`g2ebRGzn`35VLBiGx z$MA_kdAXEPSorGOV%XDYw8o2o%+cA*V4Cip*0htkL~bC#vbirqR5Z3_gmG+|x^6J9 z!q-LYy^V9SA;cQargpD3By3g@IlU!}he}9eOBQ`XE}QqHCuFkV7$`@FSj}!0<6COU znOXXB%t$5V%mtoig-x+Z6=K#DI0eYuG7_?fA1&F(?}90BS!9j{G>+$q1N~vQWG{6U zm^Z|VD>XaxSMRRdtP=x9dg{UBs$Kb)y-hw9xUW1@+r;jRt_vffjmOI4y~9_A0S|JE z_*|KdVJo1q_k4)5D{)w_|C+UnqFW-vh0d}-)$80|gY#~_`2Os7N5itVBrczAv8MY^ ziXYyXq59A#d@px~!bS>(YMJ9h0GsHFWdQZE!}gHzqSF|o#d|iz_~neL?G|{q%^1-h zo>x2+xMUT;CFCt91jWLt<<0?Z#hw(_}C^RqzOzx0k42s z^UcUZ1u1HkZ#UT2??v5zZfqNuslivUZ+tWNk%EgvzHS&{K5xX9t(5mYeCPtG*LDp$f9wo0u@h0OCG;(RS$B^b7_ z*7hzgZVaFe1>@7Q-RWoBCUldk5}ed4(-ugDj3vWIAiBdE^TghtKhi=$ms;$QS(=NRW?D< zmAz}q?IN`by&-9#R%&N(G9>jD+u>de-v?uy-w_DQa$Hl*9nz|=SwT|*aw550DCoUx zCCrO#(s@T8;MKX==wN{&d{t=#cMDyy#6EXb=@5A`28ztnDStgH)r>FJQKwMJd=o30 zVRvDegqHbyZC8<9Vs|+fkl1b{^N6N#tt?Wcbu@$1}{+ zXXA)h)(YZr4h@umYdppLt{WZ{n2kWrR~05RV+VEiaq83}4pl>H_)gTdoY|kDQQDfA zhX|D_OweH4k#2Z!Jn)WExQXcd=lgH0H7l#^wfk!7voB`YuxR&1er{5?ynx|3?Nx#Z zRqiu%Bh#;Y%{`+hPCX^YTEzj1>I@{5)vI{z+<`SvpO%}i>@%i^r3!F>HV==0)G9gb8v9(1%TTClu%zqRMV1}QT% z!;F*N`*B9^jx$}KMs(DCI<&g@s8Gyg04YrH;DPX9G?_Y6sJOpU>=*t<(%7+PO`P`X)2}1k zI4-ZgM|_xc#>*PL2xbh&JVDE8VIQI+k~9oaJD6}(zKZCMziN3|Esh7*^wnt-xBfE0uf8E#OMErPe5 za9sP5eHH4c?=xCz_5G^PXoj9?OFCk z8?=AQx^ZzQxXYdCzcdV5x4Go?1(%eIQvXs?!6Jyb)0;jfHIK9AOQ!AfSFkN6BdWh^ zF4#nD2CJOe+Vk8;$7~fIj+kbh;8RjP-fj_sQn@qbiIFyjProPCtY+EzM4v*ns2Yj@ zq4Ij%*mu!xzNp_;?IsMYi_dLjJ3$;;haXao&BxAD=Lk0_?=I}4)T56gXXkStu!f;> zRUP~WO3_;jtn#{(ZG>@$?Ptfan7JKWMFd&r*E7SQR>Xp)=2?XdY+i+})I-BO#0c>q z2zQajFoHgO-^v{*D1|JQJ=J;Ny^B_OzA4u#(48dwFXH~yJyMTX0XBbXM;-xeN{=bj zovq~sdS8*tM8J>#jiJX`N>rVMtGBpaQO4$8+Snuvoa8Qh1q>509?9)=kM(3P>9JeS zcauc(U&DBNyb}X0M?ce}XGLV_-5aBdcEGrMj2f{J@-)mvoogjbytF}90z<&Sc_&|R z`Rl7F;04_p?BL3o+PMU;*Nb_QU!lE!V+Drw9Pjc3?zavN)=Eh=_klw(Aic z)8!5(C4S$oNReRn9!V}|Z8pM&F!Pq864vaaQ|d}fpa+kjt7xQXxm;*s*w@BRs4VXO zro$Uw3-dv~V14bZyCL_QQxT^rJ#4J5j&^2y+?KH4$e1;o%`JFM>MCht@;VobbtoeU zeRWGO_l2zf4-#UblKqHx2=yT1eR`Q_-XpHJ0WBlN)(8bhNMJK`q&5}R?r^6!OeHm; zp&-z=t%^CfnMUt7ekq3ombR^J`@}gKuZ-WV$Yu5j(`X^CLUbx!ecfdR{LfQPx^LAI z*R1-W@@;t!tc-(Oox*7qHCKh!)YHb}TwZ7_0ZBYtu7b=yhh)h8GX1r>c%F03B%G_U z)ME_oMLqjL?C9c)WQl!%lD6@i#+SurfWmM$60{_RY){LEw-y2F22cC#bY}ba$t_-w zf}zG9iKs6RPM-pw(L#dga#qT}?YY(wUpp^5`=vFM-B$~h#(J1ES+4~m#bMWbCxsSE zum0HC(Oe+A!&8H8IAk(LZMf*cAh|lypyN6tCPuqvp2JVTFrJXCbL)!WCDo7tR(VSA z;_7cXTPcB{mY}*5pzX?$;R+QnA(BVgQ}Lx&CQHn`xkjZhh#SbNbVi1lmNBi zX`6-)A!`{u2E{YcFxy9919JLSO|~~-dbc74n8;R_s*HlQS1)bJrGdgyYA_aTT`3yV zv3QPGQWYpI^CTVP3EYhe0Lr#U?_PR!4Mp%sJXET`7tGr_er$3aRz@^tVinbio*j<^ zQTN{nk(*L%XQf6 zwmMzYYzrC$!uZ`cGIMA~#OtF)?0moEn{hA;3l(csVJ)sA^=E398e^J#) zXtKz6v^r0b1!P7=^lGV@P7-3G3+_QcG$NR^O}twnse>lA(BMU|BT+t}YflOQ)=L_G z%;IJ{)yXj2tSahSPpIA&@sE}VWEw-@d^)yW=NdIivj`M#tX*~5OG0s=$*i_WJUK97 zy(U+gjwc*GCq?x-*O=vr;)H3AZc#ocrmAkhCeL%kv@f0c6B~v<`Pz^5Cx~Ww=_cCl z%dO0pTBg*Vuv-wlVjltFy^)JLHiS~kFM1X{Z6B%Ao0BLaT(Lfe^=Lv|+uL6g+{U?w z98pu?!E4qZI+=(_UzcW6hL-=)-8ZhVG(Wt<4JCJ8uqItly&j^eiPH;cfwyq%Nar~{;{@nPs1r5Wt2LI#8(jtFdEJ6{P7V}~o5 z+fThn7mQB@VDZ_*~`P35?(G>-Ij_|J;Z!3c-GEgGQmAZ z-IbG==9cI<^GD}eNduPIE3WIv@q;+bCm)dkP~_i%V7!Y4{YqqRc$E?2JH&~HoFFq@ zxMS79yp>1Q7rXdZPlsRa?Q>!IVAt@wBU?qcExCxiscxHkLI+;0H&+OI z>2e^M!nnSMlxTtf%&`VD|G6krrY-p0^0MiThkE38vB>otb{d5tES*shPoN9KW3MAi zf_D`m9HqMsyv+nB!;iEio=XVCZRyi*;&W7y)#{j;6R6NMCt>@RK?qodHWCI5=xs$= zXkK*d(oRUxgu7~nshsZXjAzCje)JNPXE&$VE1j$|-YS*z9<&v@tb!Rj8)_x!WF7K8 z-jm-vYc?D>V?Df_n(U-a7*0MLy4#Sq{F`;^o=SbsLodSG-#?W1e|#8C|4lxkEqcbS zjEcH*dLk;@+A2Sffg(h$yC}GsKi;k0{cb-`_Ii{B5(3$g>mi|GOOX@;_$BMuvBTwK z4%&b%5ivUr!thIcmde#L5~qB-L{!y;^Dm#>!$*$LN?5I(AOu_(bb@%-r|Z!h&)A2( z3}tcic~Yj)uEgk(UYYVea@NKxE>=XyCFEC*XV43BxAQN(aPllOI3H3O{aYwsh^w6f z9`PD@7aZz_IfE9$$CNWa)m_z_3$hCDCqLM8o|9`7<|s#wGL?$}OxycPuCstQ0A4~j z{c<98YVbTN#7;^^46{I^7fho&mu6^eR-yu&NsT~-bX9^|*-BCu}jQFYX$ z&K)StJdLF#bh{TlY0ClvI=e-C2~moo6G^5!28P_@>BII~#X=S(?<*viuP>_*;f?tY ziN8OrVGg!69)k)nY+!Kzp0@T#=h1{Pdob`c4n>jFO|yTyZ($5E%k^?8KWnn&K0?iX(#acfJvezAK z45zYRyCLh@w%Vy|+C+@Y=Ej-A+#f03>Zf~ATGos@T@_;9qW)5^sdVH| zLg`QvNqGXVOJVoo_{n6FQefaT7Urx*xX|{?)EAf5oaG2bNVG4~{z&%>VG5UL7{(CG zpD>}>N7o8`U87l@PE}ed)zpg2=-}_T(Dp2N>Ujt90*%S&J1lOf&wul}5OM6T^LXB# zZZ;WoG`7I+dgeV{4unHpV8lB4G>`_h*x%`PMPRV#Q)j&vnokcyblsdy*vZ2CN&;Tt ztbn;2Z*QFV!f^@iLY}l+=DV3Gi?#}>8b!SH;aYDg!6T=1mKlGxQKwi$>?uyn_bLw{ zzt+w;bxEjy7_7h3j5!VAS0_<&j){m(&^YsE><;I3N~#krYoR&SIwkNJ!|N$YrTk~B zGf!+7D?2BD`5f@@^(q)0wnS%?(r-eC8j3MlbGM#6N9t3SK)A*3ihFp>NO%p#B3ts< zeQW9Z7zCNj)qGeE@cT*eEuO(C96dvBYkxbaY#)I}owQZ4QS}iFRa1!N;FgWtWsM~@ z)gb0k)e?YjJL13GW7V*sNEYs?3Kr?LDGk!g;5cU-4SQY#5U#F2VK6{e=+uBk8#6J$>ByTCjTDOR`$^LG63iYssYb zBmewK6RazpCK%>3(py#A5GceM7(Gc^Z}rn@;J&=kn7JKIcUk)8W@i~c&D z&tyASHw4&h{dgzh2Y`KO_u|UklH-vpI>(hndcIekx2{>m_oWlOSYBNgFnIPd%DQl4 zKIB_yWM@(qahwt>bu{(*jq~b;8jch8qr{i7+9^%5hiTQ~wx$_A zwZC1L7g1(T_!(|YKYFhB*`YD``q37m3mZ01}4MQ0flf zkqK$1+KPr};=B14!R9^i;lJ1fhJeogq92sFq5d=RvtfUMHjJ*vIE8T0jaiLb6FsZ< zkKs$StWA`>KB_4hqX=o47qrNbmlFLkp7H$k64M2R=#odm1lk9o{Bze@#Wl)K=zsdi z!Dl)-vZTAmi?1JZ3yLK8t^{VVzo`-Vw z=Rn`(r-A312X^Rk+S8Nm>jtW;je8=@7asjmjoIe2y=*o${sSSCK&m_@Hiwg=?po!^ zrOOt#l1eT<(NE8>V|s7ct2>0N+bFsWG;gkm{DG>MnXinGoagQIPtKtqyDSRmAP8Zn zUr3&7DVi69-HYaO?GZDzhhUKdJalO8m8qQtJ7DHm@&y5xD}JcFX;c+At-_L6QpJWP z%A+>U(Fao)gHr6UB7gMl27czr5Amwil2?`2mU7}$xu&cQR~Aa}ijrBBBt8U^S@Tur z9?DOo!p3i-h{A&I#nN}!@Kvqb967Crq#K!|IxafSweSGC*!4!@R1m;fLugXYU5 zOwp8u$r!M28}`JjZWcH8eKa_ndt;?O2n!ig<<}b>!ZnGyoB-rAb=Iux%TdYm!6kR% zZ*Ww&E_C6~Nj0%-OFL;+B_}6zQ(`5eboh3t3Z&QsNW~a0PT@iajThtZ6urVFWUR%1 zTi^6RYFEnF%dEjC%B!v!0u}9->);0M*TgXrEUUt=^9&Gp;@!o1Hj}a7X#&xsVf*!Y zR(kH}E9LuNY9d}C5kasRIs@BenD{kP(=GW;)^$4J1yPS5ebc;5dx<1w&v zFfsjqy49*%joeLjmS{4at+!g28f>;YkB(!xT9ab`ySt3GT5X)Om*&21d-{BO%<}lY zy!lpLYBW@wmdmkN&NNX-Br9PCP5F`iLFRWu0zwip!qf*QXNOlb@XYDP@`38@Nq?=r z;iLozFG1*C8-O;WFuMTU!&v}LhYbOg3{_PP(QIvP)u9X(@`J*XQbJ0g8Cp6c$zXAD zfBZClAqiO@-t%(%xN>T!uOle_dfNf51K?Z%ywds*{?@Qn009iqr2rZ_QfU0ul@%nk zGzAjVH5CPN)RFYz?HOB1RUKIxS{O-Fn;1dYxq!{XX98r0TmN(svVd-8s(&eFG9Kts z>zNuD8k&InmoM*F{ktgo5Ae}>8i4yJW+yj3?zkFKm>NQo8hWPo@Y(?)YOZB$bY^}D z@7HYMzR?N6$@ljly83$i^d`!rI9Nq%RRMi$pk^0sGH{dR`=pZXF^ z`IXlEBtO&c=%)4Rq8d_qm>Qt_cTV!O$p8$QsLa5%jNN8CPcQHJd~5;A{8++2^D+uPqz2bv%uioNEQxp97xzVJ)NfoFc#4)I|S5%anJ%YN-4 zkM~cGN=!en5u!s!&HWK>_35ksTG7~D9~z&?R)4h_o2L4q{_^GiX2X03k_IBpJaK9 zCLSLe96!(Ne?mT7j(!-Wsc}GbAVoiLSFmiF4Tqd-ddas>Kx@1IyuCAVeWm&-Dbb&gMlbn#0c@@7&! z==SC)du2U3md^uFYnWQL2szPNYIApc&7KKbO1aT)_6^I~A?BGbFXG?!<|gJR%frrO z2rwG3G|x!e!@Ewv2|hkuYOZP7D05j?w}(sP+cSd}8cZbMaNfv_)9Z9>wh=mc1az&@ zv`*w~rLel?rQTsYtRq_yC{<_t42c-Ve5pK7+v;e$70EXA;@kI>7@AC-IN-HwwLkNo z==@Kbj+9)eofbW~s}6}RI7awhtuAg2uESsRvNm z>vuR;IA^1-2wjz#BPVA>>+s`LeMvCrUseP0b1773t11rmtGq-n)4)~Zb$9YFkeF`v ze}&|SfT5z+VH-}%a^Zt;qGYsX)p4LFC2E}e9R?M=v|*p~9}^wYeCp~u`*W?X!g;-F zUbQa0$Q|Eb-u-0^!@^MB`Y`=X(*bDclRhLAP;!von+7mivf@4MVco(AJ+?(%tPOgUFk(enAL8`m(=)Qrpa_95XjeS-g?whHTK;QVNm&9SMRXtkY zO1yq^_*S5KYtE&!G=&1L8C?T86Exv@}X3CJRboaTG5Z`7FTc zB@l~7^a2RFR1=UVP)sM@Q{4G({ZHbM_itnD>L@^mc+O`|z{49{ea=%o4xa@^6i=Z+ zl*Urw*i7I}O!+OuHVh}8tF?U2&{^UNia=3Ow3-6V`5YmhRSr;ZjTDF%W3Rc7V4bVu zdvis)uHzvx1pe3`gSgd!8^X0$`;KdiW9ZAaA~b(;`FnM#yy;n^`F}UVX-+tYMBf?% z90}+1=!|`m_DNk^0*peRDA4fuFQb9zPk?~QIFCS9%lIK$aE4iIZ}h|o)H^01WVQ@aLU4+J!x1uZpDnVFE%uHO+UQJ&0LV>BStf3 z5@&;k@F@Y*@w#r)epCs2%RnJ=mA&D_>y}8ngsXnx=>^PI+g_klAovx%+s#A%*SyVU z(alGYpGi+YwhAU+Q!1^JURv5w31!P`rUFTYzWl@I;vJx`@aEflh{PVyjyL?{M{eV7 zzUdNHW&{=1)$^(6(VXFgeN0?3`7dW3#R}<-#9h5NLIA;#IP1a=d8Mj-Sl06G+ApM4 zDLKIVfJQ}Dta@1J86h;E3ky1W^r)Iz`t6@O#_##3_4U}jxU16Wax}glR7R*#W^+L` zZ9WCxLNJi_G#TAdPi#VVMO9WT9N(k*a-6+GVPNtJ;{2H1iRF*e7s?s54(N<>V0)q% znm)7+Z>2O5p{{#wD#niLMde4UD&%3)f4X6Ark4ZO*rT$9Z|jvz%g~v@$*@e(9}L#y zWt>3GIF*>P5Gt4)Y#r;sxxfxCFQ(!ls9v%G&f+`%7gd zZnqE9e83Pi9G<3*gW;UK{Q#T4rFey+r+-aFSKY9ma5_y`SB^iKxS-jjgJ_%tt@U}B!)Z*adZAm2F295Y8wlAgPUYx4D{nSYAMUVO?ezYlB4 zy5Q3drFJ!AqhBrJ-U3k({^7Iy*nistWd)+xR~9#p_l zt3GZgI43&kUIxsY=b`6VhdzIAs2B&eR8{Z1u!?Lvmix;)TA+xGC|d`;lvsl*4Fj^p zm62sH6{NpK4fl1`E$e-CT~d4OnThE@%Jy?n|M3SPtm$Z?F!3`!jRN3>Ww|&w-t0oFZ=j5ITM?QPgBl zL`xlV$ws=oM4)zq+KsE`_t~m!lQSmROR9WaKQCdI5nGObmgnR|Jh{`#?X7R@2+a6f zvZ^BRmtTzNWsM8pD)bVH7)Lm3I0+Hd=G#li#+^4V2LvM(DYcWr=mEQDwZ7}`laN)^9yZZ zn+OH|C05H+?Z|15D(OEAM*=M9QMItV!HEA*zfLL+-RF-)?dT#P#ITOc*G2{)G&+D45YcAC(5Tc|nGl7h*yl-l#Z5No|Y1fkOU2T4v;A2XGM1e;W zS_9HTSn-#q$#4<1dgb*c{Sl6sfP>K5Qn`l+IU0tqEaibC4)|{k#E{FqU>GjKjj14% z>Pr%r{s{M$nX$DA8$&3ainvl)yYhr7JeQd27s^FK<>O4TwWlGzPV1bm(dn-(EKfE3 zW~J@$3|RU{W_$)hm226AyBHpGW`{Nk!cKd%Gx+|<$EUm(y?ql}VdifTxERX}~`(L60B_%J}s-?6Irg$YC$D`QY=pQW{N4>`I{<(KC6xs9i?UFRA zBIc3&r+G02kxe8C#zK`(oL~QjrlrAdQLrL0^qfaun~<96tt(8D(2?b#$|$dUPyR!3vO$uITX4P^121Zn_skt=Ds zGGG#yIyOW2xo)RKM}w)!gImY;asVo9HwUEbnCIq~U3Y0i- zL+rVOf#aE*qY}*OsQ^WLO~C!Rw)Qf8fkzQ!^6 zfFh?BL7P)ucKuqYcLI=v4Mb}_F)hJ??dA-^=S~bZHgXJ0pT38l&*JQD2oU{^^U@!L z7=%h2Ofr0wIA3R?t-vZS?>Is3IBYJ`_#=sxZ{5G*z3f7M$4ntS-v5mCiM7|GN93~$ z?&caOPIIL!2PiU8dGlQ6Vc(`;4VU)4#M_!>GmM*^6^HVID$68H#N(H@HDFCw;^_eM zoBLqT35EW!84JZuU*7Z4=}i_Xt3n_aDm@HIJ;5a%jSK?ZtNHjt7XPH{6RP1yCbTC4 zSNBoK8}p3;i)#6Kh#Vb1%3(2-QyFXb&al&}j_p`C5%VBnd$xb|RZWlD!pZrk z3lFkVN@NavY39ar2yNQI^Ox##;vW&)=MddY^W=~!WYUNjA}1Lj=-OE#ld0z}+4@Ka z8PVk2rP?R5*~GjE%hzdP&t4Fht_!$1GL_jy$8l5#3+AADj7nnC9cL(bw;l}OG~;`2 zy9Lip87Bsy@sv+y>_|4-1<%oop-<8+I1*ye2M~SXN_kF8Ti5>^a+WUtk@b@sY?J#a z+;dh=psMG4@{}BJi8X=5fR~QU!pWg^eMtuvC0>A!z#*GFx$HA-sCc$%EaDRyl74(@ zo*xY#e1UPwRK(da^0ltf?W`S?pfwWN;Q_GEx*7s01@L#-^SL}TcLjSVi=N>TZ_P)i z(E)JIB<&sDjBW8YO8+o##vnFj!e5KVah7cN^a;i9^U4!!y(}`De3QcKBPUKicQ&Kv zURc~JU3GLEi9Hwnn2(m$0=-ffZYb{0Xgo{%B;GxhKw>!_Kb;vP{byr3@(s8^dHpCJ z8cJvsv|Z(Nn;{Tg;f#O0qEW3a~q_DVJlJ#AA zk)kC!^!=<92gy}rKRpb&Frnk_{V(x+u)N@&jc_N%%AxVA1yKnLX(}DyW|+{TAC}tk zbiKNw11}Ug$(vqT8a16k36MU3jaSf$b}s3|S5tJe8u7XZo*fdHZ8$&LSU}?ZN#$hS z*|g9y8dcPc>ijU7q{S zn`@|h&ARJ1mzl7OVpu!rG22w$F$tJYIp&-MVo3MEZ*DHI>nXOsnz7(1%+IV$g6P!D z*^tu$;onlg@tg+w<`H~O>jF)hmKg|G3r%ffsg$wz;tnlodm%LxR=mny(&54oYnmk- zQU%yU*uCbR<-Y^r_AvlX()2C#Oc$Y5Rd{K!`@~)S`<00Myh`JG!1k0(dOG>37>6jr z7UE*i4uH1OENgV&l08WYICR0$vF`xPMt!EE5Z36WIq-aNEz>}v59YMRD!?$C?>UG6 zSPaE4zBKWAE+Hk>!K>Y4AudMg-Q?z2tI&wU%%L*u_qaV92ntB<2Mc2QX54z*v=y0Q0 z!^q&gr?UkO5?iHeumKSh)F3kDg29JAFAy3LU|8?y}A0jKBEMBm9oA=X)Np&^JJC)?!uVmK8 zh*Ioq2qA8RFF{tok4t`W0U`e+Jo3Ax&+rcT7ax!$Z4P_J<7L2g`Z7#nZQA?%+u})= ze?`|ey>qGTfQGVG!+A5GwfxW!y)!FwboKt(sb$t$HDPT|X)c6>!{Jz^5?PQkaa4l@ z`pipOdRn*~;J5j5pV{r>8&x3I=%U22B3WPMO|CLA&Kaah4NwBuvl3qW{kbK7_iv|{AUI~i)&%yz#7drQ% zeoQN_w`=hF;9pc1^z1t@S$Uqfs|a>e;l^*~hr`>0(U8Mlf#iyt95kR#mM|k6j=@TJ z6v1yE*R<4;m>jiJZLC^j2pq8BnLjv@7Im2kWX$ho5#6U_SXqUo`kU`tS?V%+TzTP; zJsdz;NQdr%uKd=h%766G<{YZ0e@|%7ID;Hext=78+}M)&V;gSSs%1{Ww^Gb(kJmc; ze&ai`!r43Yx_P5-|3`Sn7Wn6sa#$&Gf@o$Qx2d8#7~P%ugPP?%+CBFCH9f8TDleN^yeZy_La!n>SIE`tM~o3$me=8P#Qu%o*YF z`>CeFTb52EjgJZaFK~>D0}Ri+LNkVEWvOlji;qx}+9wg^Cdchu9Y`i)W9#V71rpSZ zTw6SZGeFBYb%>HYMRx_ul3SN2!A991J@jQpx61mCfh+*K2_H8lZ0xk z1@+lEvE&HG9$EW*Nwd?tkIP&}oPP0C+wz+vZK?h32lI`}4IGJB;_N#xFGfZ~qe4?b zx-m@9O+r-z&Pe%@L7O`9m&)Bt_>i!_Rl9<7Cku6vJ{(M8q{3Gmtwn~VVGZWR)xs#u zww=Kkh+{MP_}di%4VDGIq4Xm$<8*96!D7=nGmWmr{U*YSb7@F?4LhKs;r#d+@|^bq zF4-w&Dm~WG_hv9CurxN$TbIC78HAHwJCMm7n_4*~ zN8-KU)acchsDZm&W>rFcV?(J{TWz>t4}Gm8Zr_B>dp5PPHi0kZiX5v)F-Of6?qu~W zCf4Y~tBvOm&4E>WnjMFM*m_y4rvWx3rN1>Ly!TjFt z2Mqofn)s6UiiS%2b>`oalJNFckAP0pW8W?Y9F{AY(LBThqT`2P^#+1RUjO#W?D>08 zI+3uP<+@j|hg@_$;6LMiS4yYQQptUXUq*Qxb9X0gBiEtZ_T}+NK%x>~aDv?cFP?4D zmI(#zkZd@Bh4)I8>27=wo9jRCh;f->XtdbpBSWBqe5GqeNx)S}9M)Od4eQu%>eB{m zX-A3)2XCDTj&@;t1m0#hvEAI;aAEwx)gslwn3!E;2e!Je3a_4_t#ool71jl2tNKrR zi8>Zk-!D#qaGj($cB-h3$AA2LCi{H?}J*o>3x<+4!@eD&MegwY zp~*+Nmjd?nR0DK87`~2G<%{|6JYVYwtImYSKFrm_pBHE7Rlw3|`vc=Q!I6Q^ut*(U z5zj0&I+j(u4iA6RfU^Qg^l@qI0`Fuyc76vJ?O_M`{`qfpBE$n zYS7C$>U1>8NVKzQKpg_WSkyH|O3pJ@t%hohsl<3g3R1=`mAHV~NFPkhZwI7c211NG zeDq{qwfcFVU_MK&w_Gm~chtKX?zWbZFh_4af`h;0iNx~>#7filKyb5VIWLsswFpKL z7SW>{BKpr6>L!Wc`D7o?-ETx+!E5kIBmFQAAuEgD1n6c!G+obYx&LlDu83XU(NDNZ z=?b6AO)68U&`4f>LG^)WAZKP z5c0Xl%>iqPjLyVdWWkAW-D-oF!?;k9u$dO4CKM8l zXCaPmC2zCBdJs0aPK+s=d)eq!;B2MWmmjE$MmCRAc<)C9@q^qqqMxxn)RlDEX2HG` zx`(6RlrNrXIG!nEb1T)~W0sTRE(?*~nbxA<3jf@%Z6)<)Adi+I)FehmYVcvSvW7{T z{XjY8ZEGxlSTt+a!G62A1LO5qJpJXq!HwPVe)0GAZxQ+iwd%Uc1ejx=cBQF+4tNQq zMs}=ZNevT3Y|UGlvCMMEBujv76fW21mziEscnl($o5mJ9`Bj_HB#$_mTNj(KbE0ed zsH13Eb{$2}&DYRB)3knRKgvbM&k=}vQa~N4gP}p&aw%)JpQTHCQ|X;jguorOYacGq zvx&7Ws(y<B7##8~T+`#UWOS%<>5H8R)gb z;*+g1HjFs5%iR5u$K@DTmx>0l zX|n{xdUuo?z8s1tmmfTD!8_&>F#0}?yE1)kTB|dCL03U!AeR`bLd<9)#+}izxcJeA zvW0xCcdaPxy+m`$L7zqM7MQnrTzMZxujRiMa=cG_KnSn_S)70)SvC?vCr-rA=%Aei zs_tOp3$rR%@1{OzI=F)$*=KL7+eIo(k+5&X77`gQ#)4gq@mWK5s5Xt$AT^l<%jGDC zKP2zZ?I@ZI?z*ar%XXzj`!Z$tgc%l}J>oHQ4C|0G*;rN>Oc1@k@nivmF3Du@IHX?MH z#|W(qd5N`h_KY7aH7<*6EzPQlGoq@Tf<^_V<~fN(CvV}Z3Pzk)M_8}#Geh^05Aylz z=DB(<6pCH*`Vgv2v}#mOe7^Ju0Z1x)s5f4I7#jX}c|qtvV%p(Q6Z4whoQJf?e|a!i zmxU;DCHetfjopO7BSi<2AM)2^(UfItZlSfrIkR4Vw~cFqWN7{{X@9$-z{jmOWn1ez zH9X6U1(6kutJu9?3mo(prc_XF(WF}E-_U?bgW2D>O_9`%4TKngV|h(C8mr1Zb++B) zq%R~rhy}#=3#>yh`S|W;U=^0n;4c%`0EJB%5F}g6l2`%6uK;yf#mgyM)5}f_zCYiw zC+3)7hC{(`{pT)-bWuJR0Ci@k)Am8Q>O&=>W>#x+uw&z)a%LD2G7BX?CeC*=y>{#L zOh?M~N0_4yOlmwe$IB;=Fut(atcg$Uei+zd>N;b&xrf_fsy(Uw-kA9$g88Z(%AfIw z#3nFw^>(}5{TT+jM%_?3Kf1ZaGGwjc;KwD0EQ_^M52=BM(pQJaf^bcW-Qt8*6td1D zq3W6%eBaWNhtrfLsxeFWnFU98qI$nxcXuO!XyEe?Pyot>llBEHSW7ekyWIkdMMVxy zg;LM^4jgpwjFpyGj!0**Mpkb|T*8H11Sah4sDy_1sI;A#thvxc`wb9mSe|V*W{T6_(h2pbo%jfl--hrGScKi zP{s|2_S)Y4Cb|_#g7>~?{_!_CN>RGQzbAvMR&zmwzk-WExx`=(RxbYdVg4Hl_bSM} zBmhR?l^Rt4G_N6UQtXOL$A_-NCoYntUx<*ze*~wAy80u;VPE$=EVPFu`zc>BXV%i` z)!T#HcS`wT>2M_jz$>%nh=SkVS15W5X0qwiM28bZ&^=H%Ynh!cpV74BHcf*Tn#Y=` z-ST|yoMKP#%wqpzxxA6RLqMq=N{pkXth`)D9!V5XYGoe}=!u6LqVn}+95R)lPExnl zKk_bIn{8bZ-TrJYE2Vd_sjYL_9KA&W!^?kT*uQ$dw&#pqU7 zD$p}-om`~Ozip8>>tu^qZjkWgAIReQYCC|hqtx2%d*{=X18g|&Iu+VbqM%EMJbPJPX!6T<|5#Yn5k`$8S zK<4D`U7>dMnCOv%mM@4Oft8?9DG&LuJJyDRu^k@?xV&d&{z?`Jz&Cot@S~z z4*~P6kTWq2&6L2!8X9?Q89r!@@s;OZQhPOf&hSDh5@4YPqPlj+%Zn0DN!JR-`<}XWxQ2yQF};#Sz6d-X!AAC#gZ<{%Iuf^52LwJX zDdybr7!uVJ7f)8MBIqCV!wC$~Nh(s>F zrPJ0nr@&n;GgMq@A!k@~80dEJC0mI@=NW;x|CH1oas{yXiz!mc+b$ioIen^^q;X3m zq%e#14Xauv2eyyy2mYezo^L1K7!S=0O%`+rzUmYHSeS9SUExw;TVfXh$Q@ zL1dFp)EFwnNmjl++yJR>-s-4aJdnj&36xPSL3hoBE8VZXAJ;iT6)ZbHRMMnSF(pv+ z)Y%fmZC`;4n4?>{q0a3wY;P1{l<{ueI1mxnF};{fWH8%hLl2RgiRi8^4GhKASbb%x zg#5>r7;o1r|E>If9>PhkukZx+uEWepByBV|!Yu^@V$g|9cEE+!)%2fOSnT$ACB6Ym}L*Tl*FNymi+#*oFsqR={ zFQ1v6!?QoAj+kg|oiYcFNuNFWXDQ*D8BEgEs#i%DBPDb430uXqOMxhxWP}*+&>;-o z42k@Mi=@U7l-KrA<-PJ;(7~Xq{5}m|PcY2^guxqqcf`qk(So)xgwlSzKpDc)myN#h zHg8|giE9%PIA0Nh9#Py>xd*PhvCP7k1x_Sp%UsTowcUe1&!0@$ia$5P-&2E&{)ST& z8=S-v-H+Kqbeg7hG)5Q>5zfx%TUAQOEbtzC#j!5c+T%xLNiWnTG_Fs8S#SHt@7qyo zA>(2&P0DfNZygLH&&=hs<=JekOEAbP!l?K_dX*U?Q5bcrjN-2=cUL$C-nP9?ctX z5@{~C3?XGc5*!*}i_P!yl2iuzvvwoqzy2t)Uk@0&Gc)ZTTcsS!32Fqjqanm;_Z{eT zJ(%E3U&_DXOwBk+thJ`LK78@d<7dJCF!N4^*r1kxOEIQKw{J-HJ+i}R%;tk1zm&!g zzeB%-4KsE28~pENaNPHLl-*tmGIJ@+YU}EmmAP*S$ik_<(#a4Wt8*E&sWA;+8^8-^ zd>sOLLFqtR+PKPwO9@C_PmDk{Abt;mN~AI{J6aZiZbUlo@++Tuw!23TY9jqH6bRGJ z(D*eySO(f7PC`8jz-|fa7`#{TIf7%Dtb#gcq2P6rkNz-`JDrL6qQK-h?2^@} zV^*?x1lhzmhz&%;vhSq&d=~5^ZCmY#9;MR5B~Guz#x;MAZhKSc;1+SG%mFC7wkoZ~ zLWmfjm>P+v9Tnnf26AP&5gp|ey`mhUWY22?p*L*fTRLHumP2=O(;2Lku8ln=j?s-i zfU^ml#_zr9KMu<^<`X;zeMVGi5Pq(ZqomS#PD9`}$-WIkwONos9eVKsr|zWM0KT!L zAU0&w=bZvvJJCal8%Vaf#M{7xx6PhlV;ulUEpgw9G^|RmR%sdBhxH02rJ7DhvwB=t z2N~+$oV(lj&MsjF&;+w0u(TrCxaJA;V@>{?wlq7KUW!~egv{cklH%^tR%ZmnMDnB9 zL4Da8qdX_>sjSptZ#xS6diwc!0kr0rI2!qC&_MI>fuhrE#j22(r7;LDFb{MXZ^yv* zkBmxs^W1Wll!7<0-gu!XgIqIq&RSS)6wAC7s2-eP~sTX@Y{NGPd&^-uM=7Np5g3s^>#>VElHl957i9BtEKjB zP3om*oT6tSd8Tl(VK`}Arf!k?i%)$4wQTncq!!C< zn53A9&PcULg4mq)>ea?ic8*QBQ4{0MT-QYgGTClPK_F?k1pH%`q3K!)m#!v)do_u3 z+Qtf)0-m%yU_w}^1x}cfB$#xnfLz zzlyWB^eI!0$*0c^xjLPaB8Geu(PfiCgIcT!CZ&dS7^4YMu6DGA=I6mHU%_I*K1y+QKw@NIH<3gAcK}o2sEqT3@AgN|d1EHbNKkatxwtEiog=ORCj@x(MODfa*`P5YW}^q8V>jgFxmp2KB%Sx~3@hK{no9KnZST*qdW$ zcw7r04Eq47jLbcu+|6xHdb;Nu2oQ-uQji*Mu~y1mKTD7{etu=jcpz48y#D8dK()1H)B&a)@Znda!f$ZdPq-)$4f-A^Z0e!=fIK*LKb^v*+C89LLs^7%G zTuluYXi&{02!3XHh2haj`#YCx`X%F>+-LtOKj&Z6Mb;cY3^3Tten`Z`QX5Chc`%^I zPqI)Bi7yl-jkteu@M9e1EaPMiE9zDes!}D_fQ_>m>!E|ldlS@-Ec(jER4Al(DP$aDlNEk>SPU(n$Mgwfd76TSX~kCd>y|mF?#kwqsc|ZrqSp6 zej}EZ#r?%iLE5xUhZw^Mjge3DOjf_5@Q_QXzvUnyv}yX%#0rT-zT0V{xK5o+-$0(p6F^4uGd7DB4ll{{@i_ov=lsPotG@OI5p zPmT8EgnBVe_HBjQ+jNo^h*G*ws%=u9`00#ScGc1yCBtKFrM~`dkO38WII>qLX z3U|2$z2C@*>n4Hgbhks)^afubfeAO?Z#q2oBpSm}GYhtI4GsYP?ZBO@5PNk^gHw(S z?vhm(Mv?Hhq0Tq1X>Dk3o3I5!tB?cA{ezY`f+o$|R#1#dv70cDu78p^htZr5*bns~X40kor#;C<7_}kb*7wa_SixxA-{bP$ z+q~Lpyjqem)Fef@+@#?s5a;5#Bw0daA}tOK_AIZKder=B6Z~hQDobH1A+18u3$+e8 zy&8Ma#F-0_5mUozh~kk4_eL7~){ght){z84ek%%g^c83{ye%EGqpd(T`?z7k;fT@o zwWsv&)L9rSfuNI;z1&kUzAHl-g)lWfqPZNrrV_r(j$7a%C;$*=f9aon%!0^k z|I8QUvhc{o3sW{)tC@S{N#KXx$)mos*;g%ilJ@ni+;oJbziAp?Bp7AXjap{!hD85D z;Z(e$DkdJ~*k#&U(PI!8u*YKE?lj(%=avIy*u}Yv22pZFH}shEcu~2FVYVG8DEifY zf&7&j$)s|7&Owy@>PiiL@i8ypNJaK@GimU0C(ep?j2Z_1o@(2RW)2Pd@C}b9xzIFL z+nMwgv_&V4<1;;uw#r>-*s7fv!zKPfO5y)7b`G(^@Bo{=w%=>pwr$(CZQHhO+qP}n zw(tMVVkVi)W|rMFT{LadKF>LiqD<{w63O_OR?V`Z-OjG+*ZbwmPZRpleAfmjb?53> zT~;!^$K=6`soq;ipPIe2aihEYaWK9v!>2^$le_D-bk+GmY(6f-m1Wi(@|wR~=EgAhmIn2rN;|^BP9SVWc_?`20&0JRZ`|0M zNOiI~l(I51WKp|%lA1gWRb=D8m3w&Uz(XT9b{`T?Gq@z!6#`r8>l|1rqY4nwMOtX) zcOYt1d00q7Tr~?b;&uc_BOVnr^q&T$d&dJakJ_=@{9h4HG;y3#&?_T3a?Va4#1z6+ zt?8a^?#1Tn2tPdF8sb`Lf#CAR6btGl zFX)&_x8`=Q0OtLAncxdXZL4GSmYwy+^qIg>slCqyRX%u?eQ>Px;NqW696f7hoz3$D3ksa+tViDJmS53_H$E-P3~dcx_$rly`1M`E!azk z*rFGPy_XOljnbP0N9Ekk&KB$uLCeaZI0KU?nx7Nw`sX5i^DjU=SR# zGPDd$f~`hPv=<+Eja-2I!wS1z-kE+(V|(0@*@On;BzNL7Ww1`iC>Ve&D_@S{es7*z z&2h<=;26Ce<+nicoc6?ODp6dN&<{pWH<8Lf;A8Z2#X2gRTY4*8Z)<_2N@vURnt{QA z2B_^K&4gxAhJUfa7P@&Tn9Bu-XURZup$3G2*P6Q%U`ZiytH-|t7R+<&!{w2n%j6MK z3rZMDA||qLSJ4) zOC_-#kFez}%vQ+51!IUteP4Bsd_+!}Gs>v`EH;|#x2lK@Wk(U%9uIE7!qphjz92YC zd|67GUXma`?y=7}MAU`LN)!L`4=lH4&+|H?`h)dy%BBQ3{io60-ggZFC$^5X(MpoL zgHbdqddl{$sohmJ^m2yS(p^GyoX|vbo%UM#zaw2Z&WVm|P*(JY`X%pCA8n-byKT~i z+P~&j4qInq0~1L$&^D2x$~y`mwMXpWcY;cO6k_M>SYR#tbb{}!rC!W^KOU`o`qway zZ9PXv@gy|V--UQ{yzh|Xv``j6Z!YLw9+8UC`utetPFmEH6JaR4y6YP`v{Jsv+j)sfBI5K3xK;Oz2;`mOff2V1#8~Q`y=ilg?}f z$9+t5nvt3B+)vxQ;5y^rYTR(k8zp{!> z#}B}IcYBZ8_I3jo6=T;Ncs?vYPeB%8N>^L7Msr1!rw+xc{zFs**Ua|rWd74Apzjo8 z#IC!wT~;y4{-{fZKNR6-TG#^=iyCy0mZn7gaw|a97?4jvh&TE7)^`cPaR&`V09+LA z9eGYgENaOD!BjcL8x>-7QVz;%_gL>S`jABUX>A8Xt(gbW;98%4ZMPLG?|!er+Z!#e ziiyQD4BY#m>mumaB>}?rh*o-j(=DbqtQ7Gs&s zFD-&8^}`eqPx7|hy)Miqz;{F*;lHiCVsChSAG2RR~t6tHYV&kWg^Gr|xl{Ef)eRMU3-{Yqb2%-htUPisR%24eg;jAgnl9Op0Knk_4Wl z^NpZ0brp^#se)Bug}iF{81fBdu&j674Jiv7Sy~;oeY}ucgCxM!X?sQ)f&dJcpsJ#e zgO06)r2<+7qllc9UtaLwqygwGA`Qxy3)RpHBSd7aV{#G!+NGnJg-E zLai3on147Q7EVc`?4+>T=+sG!Ksg4oyP4nWhqo@Z?|`zmY+aFpf0LbaGf73ijay1q zkfEBkDLxzPMyT~>Zyh@F>lwQCs8H!~Bq{^XMT@3WYAwTTBQq!%Dr1<`?N|JA9zX$4 z(6-B4sw^)67KMR{Cip5;$a9XGyzmp1lYfn#3o$rPLrUEiK-(L^jvcd$dY*OtN_i6> zzQtxZsLM+>A9$9vDiHP1y`In>Z4+_?uP2&WA^uzNT@}`NaQ>64Z2uzVKTIx|-Os7S zn;sPKiKKONdQitlz|TtU7VG_s7^$)%VZ@XRv~&NnItD#M0p-l_tK4%eX~#xoyntf zy^Hyt&) z-h_$^R)F$of!X(BSoMU7WdB4qhfv_e-?wojs`-A9n~ly=B&)LH&U|NU#nOhB5- z&*3;`bf^*rB^x4jbYT8qsR`U$*p&o7Rt%@Vdvb#)-=9n#2rTl~&vvN0=Hs6!fvu#Z zrTn9cck`nr*jn>=YK{UPt15&x8pg*MI_R#%0?tNol5qQbshaZsfIxM|kR6=}PtXQ6 ziFt2I?98qpdvv3bJv8s9N6+-7+s(%_7y4PWs@XjZfmB9oThuJIr6GcI+~^m806R=E z(*8n!=&;~{^Vwd?Nxg3$BA76;M=_gKJn! z(HD@z_y5xS1P{_siC@3+rNFF4ZM`%IqY>OW#z|NoHz#NJ0N8|d#TY@@B_NBXqa5}> zOn%;1g>g3eHS_!A__{1;f>p!4QgYDug;5E)cSpqt{OLEqkmd+c$Q+1FmWZjH7;iE^ zmYD?i5l|i;-qO)QW$1#av!!B?~vzY_-`_zMv5{ zXJD42FHzA~7CS#B?ouY(0rEtK4X5LN(aqG`*H0a|-Gl_#HCbqHy^+IlN_E9;S2y#t z^cC(T>pY?dbJ;3)6fg?zfk9WBAykQI(MaU1Z&SKD-oN@h76^vCF$@Hjkq4HTJMCmF z#%z}Y97N%HfeTR7O(73NYtpt&y&{_;co7K+4PaTnaFd(PCkMY#Ag)Y1Vp-DPP3Cgg zso7v%5ndentwljFSt{dmV0_g|zd`9>)(6BHu@+un#(5gKEAwMna;vXS{v~l&y_d&= zlk4o@;J|Q}eEzrvr|Dnf~upNpZ;Jhv;1}K56u9S#e8nIy% zyE(npxoofxWg|;WW})e;SR(Fe;HZxxeuqMybEDzK|4CGa@==KHS$iB zPInn@KS0n^Zq0k(07O#_*L>RG;)fg?2kqT1j8FudmFll|);0B&wb)L4jJ%+QzT@TH z=PBUf)e?DR;BSY;g>wyo!#Vf=zDHzwE+CjF7uR;W(SNildN#)Y1E2c8 zXj2R<%O5I47TuuOiV7?O4^d$IwRb`ZC={o7ky zZNA;N+36gYz7G~BzwDOT+RC40rI+PhGaO4O6cEdgSg0(@V8RtSiAkPKjUc7SVdZ}0MD07xz`H?jH> z6lDIgic*=m@$qN5DLn!JrnkT6?ptRdEkOY0Iyzc>EG{oC1dvathrZo%xc_t}s`&n( z>tG=9@~R6dDv5ye6XX{EbsrGoiz;CGM>eLxtl{JVvV!ns@jd-Ra)|m*@u2-Xa6lk_ ztC-1B)ui_jGE+7N>+yE}a0feS+ zu>=1R-dncSe`Uq@6zy0A-&Eb9NRP}yUK-y*w1xrcHdTsC{soaOPa=P+*^=E?VdZP)3)#_so7uyX|vr2ZNA zgV=*;WO4%8@c*|8`nq*Lm$N(BqZ&AA9%@eIomQQQd!R4u2{|f3D$wb!Q)X1tmE)*2&T~df@wbXfXRPp$#s#HyHV8rLy^;f?gRk&J>k^pPU_h1r1*fV2 z&`McrxIZ>)!2klWtojh=DpP%15c;NPr@v@p!xB_5pv#e^FZNM*&2m#{qXDATO*y5ZMe({)cJ zR21H4?5yntE5(r;Nb&E$Ams!h0GlQ`dO118{V%*8+Jx!2j z7l;0`h%To<&|Eyb(_GlZpvYEsi7+dmBTGtUGhjBm#zyPFG|Jjq=OQo6wp~LvjR?)B z)f4%o1z@FZZ|Y4``1OTRRZgS~%$_J?;q2S?DyA z2s}Xg<&k%)SZOpnq6t%2Pq0o7xdk{IXj3>0B4%fk_Ke)7o#2H5n$bSDEuts!_;-Bw zVV7YGZ~N3R|I55Ha7ZHa9P`rMY+LLn*nQBF0;)~?A{PFsF}Q4%;UQ~vNjZo189TP z#dQkn5IF-k#hr$UjGZoc{S0PiS>Tv@p)ZunGt4&m7gH&2FYJZWaLG~5Qp!;0@)ByY z0mzL5T5;q#;NkhGZNI$oq}X1$+=2SW#R|}$;TtZ*cg0uaMK|?)M5)gmd9qFh;M&$- z4QhA$|64eNqiY8r7L_mNB^xwt-dd4t{APmkd#T3bCAG?5_J^Dh#`QYjg6MTaMyv+M z_JVN0T9iKHdL8TXR9sOFj!2|wI*d<_S%-n)dpwyOKi(&(6aQ^l1+6_`c%a|4eQ+O4 zIK5H&7|OCLIU3NvNB<56d15Fr#~C9t+ybfyhYW|&a@)9rD;}Q-bIgJ~!^|udFnvaS z7^<^d5Ob;sqTDB((+P+lrlKCixoH{bFVh z1WaWaR;fI9PU3n%H)pB#u#~}>H{2k0KXeD&OAyRZ%U7(7BKf5*ln6Ki@X}*q|2n{d z-v_x~NRg?jl+`ykZAzR;9OnQXLwJ#K<_fh`w_qp6DJ?lB5;pOR&vZM#6iE+9741VQi{%m|KMOg>nbrYpkw0a zdekQ;ZX9vugX}Jqvaoj<>Ucr-$+Y5ZV(2qc{cA4d?BGq|y~NgH^>>C4%%3J1E1Fz} z_FCoaAsCw0s=gn~!Uy>A@RjVTaTUFQq^)skh8W4J=-fyV3*Hh}A1)3+HVw1F`L9oj zWGo_TsF99d?B+@&nTcv?#|$)H2@#_AXe(RWii6eKgnd-{lcOI^=i(E-8W`3)GXk>@ z?0X`L&n*}2x74L?NwW97yR$)rfm@Ta%ZLP!8rxxB)wEUlXe+R9A^&k2XEE`v3dwPP zg)D2T+T?ee_9L3rA)XrLKS2iWe{H$r9dPKj5uZ14y<#Q^Fu$m3LF|(NSuT(#FyhbTNxUlSv5f5aj<+QavO^_{qG%Me|>+*s}3cjyQE5?RvpG;QN!p z8PzX(#d4ghBJ?>BuE9C@;kSEbBsBoF&$B)5_7n()c)`eXc6h}@mEgq^%fS7CeDo57 zD3!Obg(ByA?UK1;jV^&V5pGwmK80<7WUHqe@?K69CDKThaBNaj-!NfoHW#*myo zL-%X~%=zabZk;l)efm~-VcL*D{Z|(52g46`OFVXanRD>XPX5n(@I*M~YGQ2{oa&77 zx!Id6bUE{*Uppt!ZRe>-$uK?D*_@qgEAz4tEpm0r!Ne!$MVT!uZ*2B4Ep^C{yd(mCUa@O zP#b?ZV^94)h9%oyH3yE73xd_ZpmVCO@#D4QC|*@kqk(acuQ8Ae(Ki$CEHWqMQ!~N3 zddVy~Nfa63*A>p(Gh4lj@I7N0xQ?KgmCTMMqP586U0+1NFIjyeu`0$h{utbhat2mK z&T3Qn^CPZCR@xRJ^Ju9=QuTa`;X-dr9rUn~xte6=9@%dY4FU zWvAx{=Gs)aeaF$CcUq8ttqrubP&Tb%Or4Kw@DQpev9CJIFi4}bqf697?-u?p_umn{ z`~?a})IvRk>}FZ9SNf0h-^Gt&?qy#HCHK2WWnCXa&;DOt&QgD`Z_Tk?QbRK5C?N#&sx zX;5squ{PdjFtULTdl(o*j+;u*dkct?(WxqzJ#(tImelX|6HrSwD9o+Bd##KQGmG^O zaDC;QNDxq-V%~(d4A=jD%LVI&=9hJ)5VQ5HM$fGr=nbWj<8Df^b-dhC&VxnXsIStZ z3olTh^)dL8A_yu_g*JWUkm>(@;rroD6!M?HN!>pS&-p`aWJ&nfwrH1qvd=}6H;*VU zJc)!zFl$F-`b4XqwypqK2Q0mXRQ5%QH83kKU*u3JVfrh#5)M14V2-SFgQoDVTX`qk zLR7uxG9m8f7=#r+2m(^Uja%_XLmS+7$pYQ@{u8Tb6rhMc64omX2C4Zxjdj z+^7GsK3}mHCm_vCm#Tl6R3CRwp-*>R!{rHbX)b5G$mHkino&HmNR4xQtq4CZ?rI5V z?H5ymNzEdUm#q{Qg{nZ-H)CI$5gy-}P=ve7DdMDmQJDM=nw%j1i9ng&YR{qTIG zV7r+&R3ii^nY1Q3Ih&@I5%l5Fz4U;QG==}?m86|i;fl5zsB6+4jXJ3ew(}OS5su)- z9pO!Gr7Lb$X~2>e(##pJi zT5#qu>6XH%aE5xK`zPWZ$h!7@}&}B^c=At5g z9@^;seg2xGWDKA^a4(-m^o>>Cy&8K=3`_oEHr`oVcm`j6 zXO-FH<8kq80&>P{ zgDYV(noIw=40aA0>#aa{)0FD0T74lycqRo`{mvxZl2^Z^L@nGu-fxS?*Ljdpol+3b z(2-8z-IHQD>)vFzTmwJt>G{L=-z1tlTsGT?GriXGzxm@ucQR+4EdN;R!X2QR43MAg z%YgZ+>{M8{W5N+w##nb&=Fi9kT2xx+hJ6O#YAJGGt;c1lluny?KUo694Zguo-q&fp zm_1eOLVD|TFgn~N)iIS^-SDinmi?*DFa#kE{4ZicHY;LPLNR4wYq1LC9L4z`hr5~R z&;-*eZ$CZMM#c`suF8GIBOnt|l{#CS9o=rdeGF$An94f9+oCU{1_E}&Wn*kbAQTCb z<3tqcH;{H^e_xmv0k{%7VTguuaEjE_|A5(p6Q=5-c-Q$GE76D7SVb6b_ zg>q9C0dJSjiKwu_ex6>EUMk#MbKeWB2aph|xWXay4#xxT^GgfSmx#7%y*Gm|jVV%& zLXUb2ol(gDES@y8a+-YKZ=$ta$Lk*D+8%N(-eRv4@I7GGLL6530(5pUeckVhO`0_m zEet&r4eHMy6H58y53o-hp33u~qhUUEE^12a$**+=gXNxkWzZCtx|TxAS>0BZF;TOP z+-=TK<2SGoccZ;sOjUFV;!@LHM)rBmoL3ud7*@|k6kdMG(WE)(>^8wZ<*O$N**=H9 z4>6$`-qZFrx2mP!#7>mip3Rux7B-~6uB&M}l6~DBfBp4@=!zVM+o?!n7kWY)o`SJt zRGQqk6Lxj@0AZfDJ0b04AGRLwC`hn#z-Y`bi%$X*#IJ-L0?vXfPaWO z6Ln|KFYM>?m7!{#JudYxN zzNiJGs9gjTDvI#(t3kb>dVTOzGJbI8rdWN`sod<6{)pab%jPQvX9x)mF>v`t09i|e z<{7Pt5@WE|!0_4!h1!UuN70K}Sf>+`C4Cp8DDhF6L<2u;VKCog6dpC-lX~BkMGW=> z7p3>F3yndGRZUs=ON$lFM*tppP_YbFi2mXaral?@pB zB3fu&jf|p6D<(vsGrTeHQ?Wu5UIXpiNgG2N!1J=}&|dHPev1oo_Wp@Qi0-U?_}^dn zpTZ_`tJ(JK!#>DFVyaiOx|QaKmz=$nU!J3<<2COb2l9xFOia1>L;$OB{L z*~pH6u%Ch3DD;D{1yUfr7e;@f{am40ncQYQe_~|Rk;Z_juVBQfDThT#%&9Tk`F`qk zG55IbC*330?Wiy_WGWfgr+zhAy*5%uV2d^p;tyvDNJPi;Em20yVTByB&*ru1>=)mX ztzV5CiQD?9^7^S?A455ymGymn(#|qEaN(A`TSa+xrB^`HOmU4?(|%~NcyMb1Rxc#T z%&4yonTCumI%>S5^sZ(b-RXy%FUYAik$Ry%p}y~A*Mh$Ffs+1H&l^hS>y_yGkT0fJ zADi5p--Hyzpr)*Dy=dM|u?IwLOPR){QHTAPp^S%pobcXaPH+P%lE(;RMnSa~y)&^2 z6?;8Uq7vfetH(~OtWK`*4fPNF5`UnF@F!KuN!KMgfbl}ua0EZf{J6}5lA$H&b*>z3d4&20O4jZ3 z%}OuC&N=JHX$Hge-Do4OsU{6`xC8$0pJM@Y#!!S|OA4~@4-7Dov;jq@my@r%0d`TTZ6#uU+zS*9Eef_9MTeJRACek3^_eB;Xbx$%7d>IaO;vDx zcG!{HLkPN))lR=k6{bUBq=E9vG6%+e$KsA(dz;Q66cJj(d=I7GN7cu;>Y>8Jemcv;2_v;6X{=Y5-J{t?dR z4Y3tM&S*GPo`aSa&Oy-amE{wo`S~R=4tRTTP=cO5=3W?^*>3CUoLq1V0q2@9c?YnB zAAqKz=*faYeQ}J{8?c^;L@o}*Q8Akvj~*F);QzL)`82Kj0}(v{Tj$O#T*zlXQ6s+8 zwvTE~)rT`99(+?P+X)mJKZ&lX&iL75X$>pKW^aZ286o51zvTWlA1a>CH#o2Dw2s=f zoy8hL(m+EqnA@|QLI>aQlHOBf)!KX;q-1KNwR7@R9IH*?D)g*SCyM<6mBY1|`?wD# z(wXAxnTJ~8k@0<@43OhwUsO3vafTGYdb~Fr0{eUh?NcHQ|A{6S@C5xnL_s&PYKH{f zhwIDBjaP3gR&2gQv8`}yZOr+OfW(939+Qw5&FS^IBYh8-r)=#;N1?yy8y2DuaYn1C4+=)>y{6uBb29dwKxZS`2#iQg@7i(V79Y(Bw#fwfSViCik85idM-;kYd z#O(DSXibExp718r=Q>vQ8e+Ksb>@_yz-aUt0C3;tbpJe-~xv~n&?YJe8(`1{xR5DE2E5zM^ zf7*$`MD-w-x=uTa0as`y3>z;j>1U5~?k&)dS1dl_uVOeEuq{yhyV~Hoj+IY*llIql zWQKlW%a;HOvWp6j7moVywn6;agWlBU?&`!kgKSKC25NcSwx~>4!k}P>Y`xD`8kFR0 z1>gDcSiL>IvW^s7C`edpIeD@N?pJ)n)FBXP7mmSOS(FWBgWV$Bbv2+e6UNR%R>I0x z|4Clb{c|nl8Jju2Q=IKYjB@_v`=E@_udXNdLQqHI*ODQ3wb|*?coR=AJU3R^wmk~M z9eq;M>%J*OowGA!E;M>fV8*ligojLet(76GOLwd(3!jOrkmK4_N4+{I(QaP7{_6=e zK0%E{-tL}6aK$J%D9rc7>$>1(E204C(P;VaTVh6izl~!qS+#^;9Bp)%Vl$__Fl^>9 zndqq4eQL!5UFO=p0OoB&ITz^IRM@h^E7}GqBMof!Vm3mjpK>RcoEp_TCyPq$<)}h_ zm6SjfdGo~twa3?GKy5FSS;Ck`9w2@xUWtza1i#W#LeaG%a_G2cuuy7W+wO~l;Fg z;j6c#<{V6N@W|jff;+ygi(_xH4y;0~%?YAB;3+XVNdvNZWfz%Y=&MgpF7)T{_X}7h zcC`p$w04fql-;16t*OQi6Qr)=lo)Zc3=n=38CAU4&SJ>@+>|DRhVZZtE-+tl9vhQ_ z8yLPf^!({0GQIW6q1$cNA+%C%2Dh+uu2|7SOdq+q%+9Z1c4NLHvCmIX*GnrM&U-)f z&qAy*@%We;AuNK?X9W7hI-OI7D_zn;gzBOUSp((-z5p?4V-7BiL~X$b_b#+Nh3P+{ ze?RD~$@LPTxzlJF(w#e;s!b=uV)t2qh}3uxT4Rz=J{od91(24SjPF%Z;0oVc1|ZaK zZJ;Y=lSQPT%a=^rS6nL#3V1N{c>~~KlP%U@40y2pKF0Q&bz%O~Pm%{LnI7xU`UUHp z6=!WtvRC2sy?x~dQsK^x>vnr-I7AAf0nxcYq7RMpC&on56tQRCj0Hc`u@_oq8;hld zv(?`Y2epyH<1IIOc;(v>E+y?~*CSvfKna?4D0#15Qq(91&e94ocih$5gCrgBPxJDI zRCK=9WYCQ|Ip4u6`)mdHk`y6 zuq`M;m2SS=d^P^=?CN%YpY{HeAN<^zbCj!Tv_S_nmk|b@0otHhBJf^u@f9C+%uTYZ zd|_H&v`crJPIC1kY!Q77gUPhly`j5g%v{Q>hbL=uMA29fMq1cD`N$QxvW3X=Ge$}K z`jj_c(u=x)iPJ6^%l#`KtMG;rz{IL~Df>m)3qz=_L*g8fN+3k>UGK4)rW{`@S=MZg z=h8IhN<<1ne{%np0{T@yASxFv2eaMGF^swK06=At1U3E>5Nb{ln+_C|{@~;;OoexP zUc+&6nB(LMz=O|ns2>W7>5whIbIxL$(P+dvl3A$JLBR%UaxU;X(0k-b_KWv$>Y zQ}NHDAxofEDy+9sUF`N}Y<)@lK08CxhH|GAK$uZE)UPB^e6i*2iY#13VHY(*cUIPC zNQLY3owwMEeQ-&u*EJlXa>m$?<`M}^`>m{ySEy7za7X80GoL5Z13;LL}5jOo!^t)SDMa5U~ z$$$YLs4~oEZIepJwa%NUT5JXL87_y*y8JD~TT~d6v2+&M>-k2IddVCVL%_woUDr@j zw4L0;IfO8oH>Tv%T_BtsJ1VkjzjuftZ42-T>FImnJ#ZP%8!q?LUUPz9*4<;ARLiJ) zSb_?;7k-%-h;}8Eu^o#CONbqc$$7I9{&~AkJI2PC=oWLCMXr_+G*QsOv&{JeY#8?Y zqR)q*DZ6n+_7Ej0{>SfY3rW30JbzHMH-EF9E1kr7l`ghw`ZwIA zLB&}Fp~qQiKr*Lzi#Uj0F3B|)d%d8qMeI|Q_d#%~xa86pC7-p=ThT@Om%N9@rU_IO zEqoz4$Odt{(j}VplTg;<`!U`~6XR`GjF9XfRN2l1OnRe?n_!(*-9zwualJ5YZts&J)+5VW1&Lw@Q@)WvL6Fd zGX?`tnp6rI2M3V8V@qHEpN`#D!R#XLogfHYmb^sCD^dwOtH+cgyp}sJF$OBqma-4& zS2YN_pk(nzea@feI(}peXH81746Vj2FwMzL3{<_&!@B87i^ex9hE3#HCk%IRng_+5 zdRe%?TzqHsh6z4|HXp*I|=Y!GOI{C)d+I9098i zn+cQ_l11L$DnxQSOpU;NiGtx+MV)`L2JhLMX#b^3zLq&0K_Je;haeSX20k0_*Tym~ zNPC-QVP=aIHa28Hk>{wFe0nK$Ee7agi7s$hB(B^&JB;}8Aj_^&soVlY-oJB#%7gol z6WXGIySGWqkT(9FtI=vGZ(k$Y9bR_33CdIAdTc8Ky7Hb>MU;9RBB5cao*wZ5U*#)i z$J>osvrjh(J(0?g1W6p-T}@-s%Rn&x=CK8qBk|n}UtC8*hZku`fq7{=(p|-(9IT}gwg%>UhHfY7vg-N zzsouQermiqyZUcfSy+%<5(s+Vg9|%|9Ot>=L|Wy<(CLQ)N=K$W9+(>#hi?4m0D zxW{g5wVh%P=vkwStYKoMiG(;)9p75-Fd$+0#2b)qX_#Cuxqfr#ozG;be^W|<=8E8JD(Lh!VBBZ0=2wK(daB;te%vKT=bx<-Y8M8(?~ zr6Lz+r$yOKc2@jY@y&hQIxkxbxJ9{KH0?LQY@<%g=qX=@byUcGF!lU8g_0B;;EmiE z!~MiFgJ@vX1jF+;9X-4b3od%RB!_q4)Az3PI^-*t5nePLENppf@kIl3xC@z%=;EwH zRgX<28Ye41u0!wn%7t z4-UYx37gN59lJ%?8xlm4c!1d_hgEC)fF+zz>(>*k#k1SuY`&% z7U&S^bY>?Ae#;hSA;ufzq{aTzwfVsQ^}JL_a(SN%&79D*m~Ui_V@F9>zCry|`+tBC zXF=Ft#1WUS!y^)6%~Z_p3= zE*!ag17LW+B4}yS>K|HWLBzhi{Nv(5I!5U=1iGO}vf{f~`rrgLy_v)_M>Lb$xPKEm zIeO>6lvOD@Am+Pd_^9f=esq(Yva}c;`bN(Yy0c2{HLWAWjzfz<_!XhC5x2;oHu`&- zeKDViDzS-ZFpm!$62PXj_7&eeG#7prn_+A=y8Pja%>F?~n|A25`HMa20d>cwvccmf z6es_&_*bH&&VMp}er|e-R90NEr`|`MPgJg8&O&|Brb@8ElIHvAz<75v;1g+mNH%x0 zh>m5jSEgYw)CBe{>?E>9<{kw_;+SgQ9###E&2fN;ryRG6ZjVBhq7v|IMBol+#8(zp zaGAUeDn-T|)dn5t1cO5xf`CBe^fw-`8*og>3@+oqZ9MZ73cAbM-4YG;(-=s8wy6p^ zmbl@oytb@cH$A`|MhsG%cUb6tYyJLjMnI)(D)QVso1vN2qPBpGxz36ZV=}Y-&T+nZ zSh2$)>BT_AEs_4g#{hRjL%~&U9-oZJD~Y}_uHFpiqa80mb77xf{$9mmL*RcHJ7;KN zctAm3+qP}n#&>Powr$(CZQHhO+uFZ*XSaC8mT6NYImu*Z4}Z@t98W_C#Z~V)k*Qk? zv-THXR)8k@e}l4_{#PiQiS_?N*_{7D+5a>8f0=Af&i{z+|6eBC)kGP4vz3+h_7<&~ z10=GmOUnTWL%?DRl)zvljzZ7sgKy~+T z0MCxIOMMVfdR}jP5Fx|anm)yM#G#*$0y+#>|IGk^7B~b3K~;rGadiQNzQXc6I7MKA zJ~{$O{)s85Lp@kIr+QF9t-h*1?KCLB#}`1o@8sfvoMo-Hoc3ZZ07Cx?ruEIeGwihm ztm`kZ13>lwT^+8rPF^oCjy9kx9RbC61(-cXKcFS7L(>QG{)8>`mvnp+^!3Ei3-YT- zDX3FOmu43S#}J^LLd!AA?< z?}4A8MgSliT4=Ig=TBSf6ow2baLjZ;3zfK2R%g$GSj&ZLJ)O+_qokQymZB zAFWq>6Z7y@-PV8X%WuU1;4M_>x}yPrN1mbPP@dryrvPL7A50X}G8!1bm*OY3Pe2$T%2Sh&!Nle=Ei|7Q?%e1i;i^?UeRk2iYIE<~P2@y`zBK@0Be69FYtSl`7cE4$DeJ0F1JAUZs z5PAPGr5)bB-p1eBnI3tQUr|Ds=8*L-Obi_kNQ*~ilONV^|Eet=o!rgO)dj!FPu!Cp zGCY`9U=3p`y8dcmLF|PF=Dp_PoA8k%nGdhPZ~?>FB3MshV85lhn}FwW=zp3h9T^O@ zqvG))@wyM-vo9Oe)*Lxrl6dr;iv1&RDt@rlU7&B)Q&+*)9DUm-#p`I{A@#f@&K4IE zBS5^M9J`}Uu2WJsishsmZ#r{wwdw$vThIWJ=(Jgm-&Kp3hhbdz7zmJ-5b&^R$-O!{ zJ(y@1cv#mzk=vb8MHfl$_?45M)Pe(*^&JdlYQ3d?qm_Du%mW( z<{^87rfY}Abi~I30X}`6;_5B0I7)Tq1&8HtxJc+XiTMic>z-(*@FqBWmK3*7Dy1 z9iP6_rOO0P*$8|0gOj-@<6BOm?PMT#VYS~7O6aDDZL4EwKb*#Wu5^loD&^N>b@z_= zgLRWGd420B3e3oEBZl$yIpDF-X-Dx!7U~`+V5H9|3v(S{wMNmrQfFefBATJBm+2=# zy7@J=X02wxU6b$FHeEfYY@Fqj*Ai1}FZr>8E745oBo%7zEgE*ZJ<~j#`X2Ko!{ERAw0B;Zm6$HoOLsMWH3vg0g1LFvtxWot4Rxl!xd;Eo5}p#CiUOC^ zZW2it$N<#@a1=9vXgnbMlPGZ7r_^k8>w z?G}yroSU;VwIK&Q<%g4uYCF*7hDYwlB~<(f9_mWWeln%98V>JYxJTod1d}IA*SgpI zoos7nk&Ts{{vG>Tb8D9P(97{}bJ1lD+Kt!M?^z2KO|ih;?Hhg6h@DHnO_n%0AUl0! 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 + + 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 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. +*/ + +"use strict"; /* it summons the Cthulhu in a proper way, they say */ + +var Search = { + formatVersion: 2, /* the data filename contains this number too */ + + dataSize: 0, /* used mainly by tests, not here */ + symbolCount: '…', + trie: null, + map: null, + mapFlagsOffset: null, + typeMap: null, + maxResults: 0, + + /* Type sizes and masks. The data is always fetched as 16/32bit number and + then masked to 1, 2, 3 or 4 bytes. Fortunately on LE a mask is enough, + on BE we'd have to read N bytes before and then mask. */ + nameSizeBytes: null, + nameSizeMask: null, + resultIdBytes: null, + resultIdMask: null, + fileOffsetBytes: null, + fileOffsetMask: null, + lookaheadBarrierMask: null, + + /* Always contains at least the root node offset and then one node offset + per entered character */ + searchString: '', + searchStack: [], + + /* So items don't get selected right away when a cursor is over results but + only after mouse moves */ + mouseMovedSinceLastRender: false, + + /* Whether we can go back in history in order to hide the search box or + not. We can't do that if we arrived directly on #search from outside. */ + canGoBackToHideSearch: false, + + /* Autocompletion in the input field is whitelisted only for character + input (so not deletion, cut, or anything else). This is flipped in the + onkeypress event and reset after each oninput event. */ + autocompleteNextInputEvent: false, + + init: function(buffer, maxResults) { + let view = new DataView(buffer); + + /* The file is too short to contain at least the headers and empty + sections */ + if(view.byteLength < 31) { + console.error("Search data too short"); + return false; + } + + if(view.getUint8(0) != 'M'.charCodeAt(0) || + view.getUint8(1) != 'C'.charCodeAt(0) || + view.getUint8(2) != 'S'.charCodeAt(0)) { + console.error("Invalid search data signature"); + return false; + } + + if(view.getUint8(3) != this.formatVersion) { + console.error("Invalid search data version"); + return false; + } + + /* Fetch type sizes. The only value that can fail is result ID byte + count, where value of 3 has no assigned meaning. */ + let typeSizes = view.getUint8(4, true); + if((typeSizes & 0x01) >> 0 == 0) { + this.fileOffsetBytes = 3; + this.fileOffsetMask = 0x00ffffff; + this.lookaheadBarrierMask = 0x00800000; + } else /* (typeSizes & 0x01) >> 0 == 1 */ { + this.fileOffsetBytes = 4; + this.fileOffsetMask = 0xffffffff; + this.lookaheadBarrierMask = 0x80000000; + } + if((typeSizes & 0x06) >> 1 == 0) { + this.resultIdBytes = 2; + this.resultIdMask = 0x0000ffff; + } else if((typeSizes & 0x06) >> 1 == 1) { + this.resultIdBytes = 3; + this.resultIdMask = 0x00ffffff; + } else if((typeSizes & 0x06) >> 1 == 2) { + this.resultIdBytes = 4; + this.resultIdMask = 0xffffffff; + } else /* (typeSizes & 0x06) >> 1 == 3 */ { + console.error("Invalid search data result ID byte value"); + return false; + } + if((typeSizes & 0x08) >> 3 == 0) { + this.nameSizeBytes = 1; + this.nameSizeMask = 0x00ff; + } else /* (typeSizes & 0x08) >> 3 == 1 */ { + this.nameSizeBytes = 2; + this.nameSizeMask = 0xffff; + } + + /* Separate the data into the trie and the result / type map. Because + we're reading larger values than there might be and then masking out + the high bytes, keep extra 1/2 byte padding at the end to avoid + OOB errors. */ + let mapOffset = view.getUint32(12, true); + let typeMapOffset = view.getUint32(16, true); + /* There may be a 3-byte file offset at the end of the trie which we'll + read as 32-bit, add one safety byte in that case */ + this.trie = new DataView(buffer, 20, mapOffset - 20 + (4 - this.fileOffsetBytes)); + /* There may be a 3-byte file size (for zero results) which we'll read + as 32-bit, add one safety byte in that case */ + this.map = new DataView(buffer, mapOffset, typeMapOffset - mapOffset + (4 - this.fileOffsetBytes)); + /* No variable-size types in the type map at the moment */ + this.typeMap = new DataView(buffer, typeMapOffset); + + /* Offset of the first result map item is after N + 1 offsets and N + flags, calculate flag offset from that */ + this.mapFlagsOffset = this.fileOffsetBytes*(((this.map.getUint32(0, true) & this.fileOffsetMask) - this.fileOffsetBytes)/(this.fileOffsetBytes + 1) + 1); + + /* Set initial properties */ + this.dataSize = buffer.byteLength; + this.symbolCount = view.getUint32(8, true) + " symbols (" + Math.round(this.dataSize/102.4)/10 + " kB)"; + this.maxResults = maxResults ? maxResults : 100; + this.searchString = ''; + this.searchStack = [this.trie.getUint32(0, true)]; + + /* istanbul ignore if */ + if(typeof document !== 'undefined') { + document.getElementById('search-symbolcount').innerHTML = this.symbolCount; + document.getElementById('search-input').disabled = false; + document.getElementById('search-input').placeholder = "Type something here …"; + document.getElementById('search-input').focus(); + + /* Search for the input value (there might be something already, + for example when going back in the browser) */ + let value = document.getElementById('search-input').value; + + /* Otherwise check the GET parameters for `q` and fill the input + with that */ + if(!value.length) { + var args = decodeURIComponent(window.location.search.substr(1)).trim().split('&'); + for(var i = 0; i != args.length; ++i) { + if(args[i].substring(0, 2) != 'q=') continue; + + value = document.getElementById('search-input').value = args[i].substring(2); + break; + } + } + + if(value.length) Search.searchAndRender(value); + } + + return true; + }, + + download: /* istanbul ignore next */ function(url) { + var req = window.XDomainRequest ? new XDomainRequest() : new XMLHttpRequest(); + if(!req) return; + + req.open("GET", url, true); + req.responseType = 'arraybuffer'; + req.onreadystatechange = function() { + if(req.readyState != 4) return; + + Search.init(req.response); + } + req.send(); + }, + + base85decode: function(base85string) { + function charValue(char) { + if(char >= 48 && char < 58) /* 0-9 -> 0-9 */ + return char - 48 + 0; + if(char >= 65 && char < 91) /* A-Z -> 10-35 */ + return char - 65 + 10; + if(char >= 97 && char < 123) /* a-z -> 36-61 */ + return char - 97 + 36; + if(char == 33) /* ! -> 62 */ + return 62; + /* skipping 34 (') */ + if(char >= 35 && char < 39) /* #-& -> 63-66 */ + return char - 35 + 63; + /* skipping 39 (") */ + if(char >= 40 && char < 44) /* (-+ -> 67-70 */ + return char - 40 + 67; + /* skipping 44 (,) */ + if(char == 45) /* - -> 71 */ + return 71; + if(char >= 59 && char < 65) /* ;-@ -> 72-77 */ + return char - 59 + 72; + if(char >= 94 && char < 97) /* ^-` -> 78-80 */ + return char - 94 + 78; + if(char >= 123 && char < 127) /* {-~ -> 81-84 */ + return char - 123 + 81; + + return 0; /* Interpret padding values as zeros */ + } + + /* Pad the string for easier decode later. We don't read past the file + end, so it doesn't matter what garbage is there. */ + if(base85string.length % 5) { + console.log("Expected properly padded base85 data"); + return; + } + + let buffer = new ArrayBuffer(base85string.length*4/5); + let data8 = new DataView(buffer); + for(let i = 0; i < base85string.length; i += 5) { + let char1 = charValue(base85string.charCodeAt(i + 0)); + let char2 = charValue(base85string.charCodeAt(i + 1)); + let char3 = charValue(base85string.charCodeAt(i + 2)); + let char4 = charValue(base85string.charCodeAt(i + 3)); + let char5 = charValue(base85string.charCodeAt(i + 4)); + + data8.setUint32(i*4/5, char5 + + char4*85 + + char3*85*85 + + char2*85*85*85 + + char1*85*85*85*85, false); /* BE, yes */ + } + + return buffer; + }, + + load: function(base85string) { + return this.init(this.base85decode(base85string)); + }, + + /* http://ecmanaut.blogspot.com/2006/07/encoding-decoding-utf8-in-javascript.html */ + toUtf8: function(string) { return unescape(encodeURIComponent(string)); }, + fromUtf8: function(string) { return decodeURIComponent(escape(string)); }, + + autocompletedCharsToUtf8: function(chars) { + /* Strip incomplete UTF-8 chars from the autocompletion end */ + for(let i = chars.length - 1; i >= 0; --i) { + let c = chars[i]; + + /* We're safe, finish */ + if( + /* ASCII value at the end */ + (c < 128 && i + 1 == chars.length) || + + /* Full two-byte character at the end */ + ((c & 0xe0) == 0xc0 && i + 2 == chars.length) || + + /* Full three-byte character at the end */ + ((c & 0xf0) == 0xe0 && i + 3 == chars.length) || + + /* Full four-byte character at the end */ + ((c & 0xf8) == 0xf0 && i + 4 == chars.length) + ) break; + + /* Continuing UTF-8 character, go further back */ + if((c & 0xc0) == 0x80) continue; + + /* Otherwise the character is not complete, drop it from the end */ + chars.length = i; + break; + } + + /* Convert the autocompleted UTF-8 sequence to a string */ + let suggestedTabAutocompletionString = ''; + for(let i = 0; i != chars.length; ++i) + suggestedTabAutocompletionString += String.fromCharCode(chars[i]); + return suggestedTabAutocompletionString; + }, + + /* Returns the values in UTF-8, but input is in whatever shitty 16bit + encoding JS has */ + search: function(searchString) { + /* Normalize the search string first, convert to UTF-8 and trim spaces + from the left. From the right they're trimmed only if nothing is + found, see below. */ + searchString = this.toUtf8(searchString.toLowerCase().replace(/^\s+/,'')); + + /* TODO: maybe i could make use of InputEvent.data and others here */ + + /* Find longest common prefix of previous and current value so we don't + need to needlessly search again */ + let max = Math.min(searchString.length, this.searchString.length); + let commonPrefix = 0; + for(; commonPrefix != max; ++commonPrefix) + if(searchString[commonPrefix] != this.searchString[commonPrefix]) break; + + /* Drop items off the stack if it has has more than is needed for the + common prefix (it needs to have at least one item, though) */ + if(commonPrefix + 1 < this.searchStack.length) + this.searchStack.splice(commonPrefix + 1, this.searchStack.length - commonPrefix - 1); + + /* Add new characters from the search string */ + let foundPrefix = commonPrefix; + for(; foundPrefix != searchString.length; ++foundPrefix) { + /* Calculate offset and count of children */ + let offset = this.searchStack[this.searchStack.length - 1]; + + /* If there's a lot of results, the result count is a 16bit BE value + instead */ + let resultCount = this.trie.getUint8(offset); + let resultCountSize = 1; + if(resultCount & 0x80) { + resultCount = this.trie.getUint16(offset, false) & ~0x8000; + ++resultCountSize; + } + + let childCount = this.trie.getUint8(offset + resultCountSize); + + /* Go through all children and find the next offset */ + let childOffset = offset + resultCountSize + 1 + resultCount*this.resultIdBytes; + let found = false; + for(let j = 0; j != childCount; ++j) { + if(String.fromCharCode(this.trie.getUint8(childOffset + j)) != searchString[foundPrefix]) + continue; + + this.searchStack.push(this.trie.getUint32(childOffset + childCount + j*this.fileOffsetBytes, true) & this.fileOffsetMask & ~this.lookaheadBarrierMask); + found = true; + break; + } + + /* Character not found */ + if(!found) { + /* If we found everything except spaces at the end, pretend the + spaces aren't there. On the other hand, we *do* want to + try searching with the spaces first -- it can narrow down + the result list for page names or show subpages (which are + after a lookahead barrier that's a space). */ + if(!searchString.substr(foundPrefix).trim().length) + searchString = searchString.substr(0, foundPrefix); + + break; + } + } + + /* Save the whole found prefix for next time */ + this.searchString = searchString.substr(0, foundPrefix); + + /* If the whole thing was not found, return an empty result and offer + external search */ + if(foundPrefix != searchString.length) { + /* istanbul ignore if */ + if(typeof document !== 'undefined') { + let link = document.getElementById('search-external'); + if(link) + link.href = link.dataset.searchEngine.replace('{query}', encodeURIComponent(searchString)); + } + return [[], '']; + } + + /* Otherwise gather the results */ + let suggestedTabAutocompletionChars = []; + let results = []; + let leaves = [[this.searchStack[this.searchStack.length - 1], 0]]; + while(leaves.length) { + /* Pop offset from the queue */ + let current = leaves.shift(); + let offset = current[0]; + let suffixLength = current[1]; + + /* Calculate child count. If there's a lot of results, the count + "leaks over" to the child count storage. */ + /* TODO: hmmm. this is helluvalot duplicated code. hmm. */ + let resultCount = this.trie.getUint8(offset); + let resultCountSize = 1; + if(resultCount & 0x80) { + resultCount = this.trie.getUint16(offset, false) & ~0x8000; + ++resultCountSize; + } + + let childCount = this.trie.getUint8(offset + resultCountSize); + + /* Populate the results with all values associated with this node */ + for(let i = 0; i != resultCount; ++i) { + let index = this.trie.getUint32(offset + resultCountSize + 1 + i*this.resultIdBytes, true) & this.resultIdMask; + results.push(this.gatherResult(index, suffixLength, 0xffffff)); /* should be enough haha */ + + /* 'nuff said. */ + if(results.length >= this.maxResults) + return [results, this.autocompletedCharsToUtf8(suggestedTabAutocompletionChars)]; + } + + /* Dig deeper */ + let childOffset = offset + resultCountSize + 1 + resultCount*this.resultIdBytes; + for(let j = 0; j != childCount; ++j) { + let offsetBarrier = this.trie.getUint32(childOffset + childCount + j*this.fileOffsetBytes, true) & this.fileOffsetMask; + + /* Lookahead barrier, don't dig deeper */ + if(offsetBarrier & this.lookaheadBarrierMask) continue; + + /* Append to the queue */ + leaves.push([offsetBarrier & ~this.lookaheadBarrierMask, suffixLength + 1]); + + /* We don't have anything yet and this is the only path + forward, add the char to suggested Tab autocompletion. Can't + extract it from the leftmost 8 bits of offsetBarrier because + that would make it negative, have to load as Uint8 instead. + Also can't use String.fromCharCode(), because later doing + str.charCodeAt() would give me back UTF-16 values, which is + absolutely unwanted when all I want is check for truncated + UTF-8. */ + if(!results.length && leaves.length == 1 && childCount == 1) + suggestedTabAutocompletionChars.push(this.trie.getUint8(childOffset + j)); + } + } + + return [results, this.autocompletedCharsToUtf8(suggestedTabAutocompletionChars)]; + }, + + gatherResult: function(index, suffixLength, maxUrlPrefix) { + let flags = this.map.getUint8(this.mapFlagsOffset + index); + let resultOffset = this.map.getUint32(index*this.fileOffsetBytes, true) & this.fileOffsetMask; + + /* The result is an alias, parse the aliased prefix */ + let aliasedIndex = null; + if((flags & 0xf0) == 0x00) { + aliasedIndex = this.map.getUint32(resultOffset, true) & this.resultIdMask; + resultOffset += this.resultIdBytes; + } + + /* The result has a prefix, parse that first, recursively */ + let name = ''; + let url = ''; + if(flags & (1 << 3)) { + let prefixIndex = this.map.getUint32(resultOffset, true) & this.resultIdMask; + let prefixUrlPrefixLength = Math.min(this.map.getUint16(resultOffset + this.resultIdBytes, true) & this.nameSizeMask, maxUrlPrefix); + + let prefix = this.gatherResult(prefixIndex, 0 /*ignored*/, prefixUrlPrefixLength); + name = prefix.name; + url = prefix.url; + + resultOffset += this.resultIdBytes + this.nameSizeBytes; + } + + /* The result has a suffix, extract its length */ + let resultSuffixLength = 0; + if(flags & (1 << 0)) { + resultSuffixLength = this.map.getUint16(resultOffset, true) & this.nameSizeMask; + resultOffset += this.nameSizeBytes; + } + + let nextResultOffset = this.map.getUint32((index + 1)*this.fileOffsetBytes, true) & this.fileOffsetMask; + + /* Extract name */ + let j = resultOffset; + for(; j != nextResultOffset; ++j) { + let c = this.map.getUint8(j); + + /* End of null-delimited name */ + if(!c) { + ++j; + break; /* null-delimited */ + } + + name += String.fromCharCode(c); /* eheh. IS THIS FAST?! */ + } + + /* The result is an alias and we're not deep inside resolving a prefix, + extract the aliased name and URL */ + /* TODO: this abuses 0xffffff to guess how the call stack is deep and + that's just wrong, fix! */ + if(aliasedIndex != null && maxUrlPrefix == 0xffffff) { + let alias = this.gatherResult(aliasedIndex, 0 /* ignored */, 0xffffff); /* should be enough haha */ + + /* Keeping in UTF-8, as we need that for proper slicing (and concatenating) */ + return {name: name, + alias: alias.name, + url: alias.url, + flags: alias.flags, + cssClass: alias.cssClass, + typeName: alias.typeName, + suffixLength: suffixLength + resultSuffixLength}; + } + + /* Otherwise extract URL from here */ + let max = Math.min(j + maxUrlPrefix - url.length, nextResultOffset); + for(; j != max; ++j) { + url += String.fromCharCode(this.map.getUint8(j)); + } + + /* This is an alias, return what we have, without parsed CSS class and + type name as those are retrieved from the final target type */ + if(!(flags >> 4)) + return {name: name, + url: url, + flags: flags & 0x0f, + suffixLength: suffixLength + resultSuffixLength}; + + /* Otherwise, get CSS class and type name for the result label */ + let typeMapIndex = (flags >> 4) - 1; + let cssClass = [ + /* Keep in sync with _search.py */ + 'm-default', + 'm-primary', + 'm-success', + 'm-warning', + 'm-danger', + 'm-info', + 'm-dim' + ][this.typeMap.getUint8(typeMapIndex*2)]; + let typeNameOffset = this.typeMap.getUint8(typeMapIndex*2 + 1); + let nextTypeNameOffset = this.typeMap.getUint8((typeMapIndex + 1)*2 + 1); + let typeName = ''; + for(let j = typeNameOffset; j != nextTypeNameOffset; ++j) + typeName += String.fromCharCode(this.typeMap.getUint8(j)); + + /* Keeping in UTF-8, as we need that for proper slicing (and + concatenating). Strip the type from the flags, as it's now expressed + directly. */ + return {name: name, + url: url, + flags: flags & 0x0f, + cssClass: cssClass, + typeName: typeName, + suffixLength: suffixLength + resultSuffixLength}; + }, + + escape: function(name) { + return name.replace(/[\"&<>]/g, function (a) { + return { '"': '"', '&': '&', '<': '<', '>': '>' }[a]; + }); + }, + escapeForRtl: function(name) { + /* Besides the obvious escaping of HTML entities we also need + to escape punctuation, because due to the RTL hack to cut + text off on left side the punctuation characters get + reordered (of course). Prepending ‎ works for most + characters, parentheses we need to *soak* in it. But only + the right ones. And that for some reason needs to be also for &. + Huh. https://en.wikipedia.org/wiki/Right-to-left_mark */ + return this.escape(name).replace(/[:=]/g, '‎$&').replace(/(\)|>|&|\/)/g, '‎$&‎'); + }, + + renderResults: /* istanbul ignore next */ function(resultsSuggestedTabAutocompletion) { + if(!this.searchString.length) { + document.getElementById('search-help').style.display = 'block'; + document.getElementById('search-results').style.display = 'none'; + document.getElementById('search-notfound').style.display = 'none'; + return; + } + + document.getElementById('search-help').style.display = 'none'; + + /* Results found */ + if(resultsSuggestedTabAutocompletion[0].length) { + let results = resultsSuggestedTabAutocompletion[0]; + + document.getElementById('search-results').style.display = 'block'; + document.getElementById('search-notfound').style.display = 'none'; + + let list = ''; + for(let i = 0; i != results.length; ++i) { + /* Labels + */ + list += '

' + (results[i].flags & 2 ? '
deprecated
' : '') + (results[i].flags & 4 ? '
deleted
' : ''); + + /* Render the alias (cut off from the right) */ + if(results[i].alias) { + list += '
' + this.escape(results[i].name.substr(0, results[i].name.length - this.searchString.length - results[i].suffixLength)) + '' + this.escape(results[i].name.substr(results[i].name.length - this.searchString.length - results[i].suffixLength, this.searchString.length)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - results[i].suffixLength)) + ': ' + this.escape(results[i].alias) + ''; + + /* Render the normal thing (cut off from the left, have to + escape for RTL) */ + } else { + list += '
' + this.escapeForRtl(results[i].name.substr(0, results[i].name.length - this.searchString.length - results[i].suffixLength)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - this.searchString.length - results[i].suffixLength, this.searchString.length)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - results[i].suffixLength)); + } + + /* The closing */ + list += '
'; + } + document.getElementById('search-results').innerHTML = this.fromUtf8(list); + document.getElementById('search-current').scrollIntoView(true); + + /* Append the suggested tab autocompletion, if any, and if the user + didn't just delete it */ + let searchInput = document.getElementById('search-input'); + if(this.autocompleteNextInputEvent && resultsSuggestedTabAutocompletion[1].length && searchInput.selectionEnd == searchInput.value.length) { + let suggestedTabAutocompletion = this.fromUtf8(resultsSuggestedTabAutocompletion[1]); + + let lengthBefore = searchInput.value.length; + searchInput.value += suggestedTabAutocompletion; + searchInput.setSelectionRange(lengthBefore, searchInput.value.length); + } + + /* Nothing found */ + } else { + document.getElementById('search-results').innerHTML = ''; + document.getElementById('search-results').style.display = 'none'; + document.getElementById('search-notfound').style.display = 'block'; + } + + /* Don't allow things to be selected just by motionless mouse cursor + suddenly appearing over a search result */ + this.mouseMovedSinceLastRender = false; + + /* Reset autocompletion, if it was allowed. It'll get whitelisted next + time a character gets inserted. */ + this.autocompleteNextInputEvent = false; + }, + + searchAndRender: /* istanbul ignore next */ function(value) { + let prev = performance.now(); + let results = this.search(value); + let after = performance.now(); + this.renderResults(results); + if(this.searchString.length) { + document.getElementById('search-symbolcount').innerHTML = + results[0].length + (results[0].length >= this.maxResults ? '+' : '') + " results (" + Math.round((after - prev)*10)/10 + " ms)"; + } else + document.getElementById('search-symbolcount').innerHTML = this.symbolCount; + }, +}; + +/* istanbul ignore next */ +function selectResult(event) { + if(!Search.mouseMovedSinceLastRender) return; + + if(event.currentTarget.parentNode.id == 'search-current') return; + + let current = document.getElementById('search-current'); + current.removeAttribute('id'); + event.currentTarget.parentNode.id = 'search-current'; +} + +/* This is separated from showSearch() because we need non-destructive behavior + when appearing directly on a URL with #search */ /* istanbul ignore next */ +function updateForSearchVisible() { + /* Prevent accidental scrolling of the body, prevent page layout jumps */ + let scrolledBodyWidth = document.body.offsetWidth; + document.body.style.overflow = 'hidden'; + document.body.style.paddingRight = (document.body.offsetWidth - scrolledBodyWidth) + 'px'; + + document.getElementById('search-input').value = ''; + document.getElementById('search-input').focus(); + document.getElementById('search-results').style.display = 'none'; + document.getElementById('search-notfound').style.display = 'none'; + document.getElementById('search-help').style.display = 'block'; +} + +/* istanbul ignore next */ +function showSearch() { + window.location.hash = '#search'; + Search.canGoBackToHideSearch = true; + + updateForSearchVisible(); + document.getElementById('search-symbolcount').innerHTML = Search.symbolCount; + return false; +} + +/* istanbul ignore next */ +function hideSearch() { + /* If the search box was opened using showSearch(), we can go back in the + history. Otherwise (for example when we landed to #search from a + bookmark or another server), going back would not do the right thing and + in that case we simply replace the current history state. */ + if(Search.canGoBackToHideSearch) { + Search.canGoBackToHideSearch = false; + window.history.back(); + } else { + window.location.hash = '#!'; + window.history.replaceState('', '', window.location.pathname); + } + + /* Restore scrollbar, prevent page layout jumps */ + document.body.style.overflow = 'auto'; + document.body.style.paddingRight = '0'; + + return false; +} + +/* istanbul ignore next */ +function copyToKeyboard(text) { + /* Append to the popup, appending to document.body would cause it to + scroll when focused */ + let searchPopup = document.getElementsByClassName('m-doc-search')[0]; + let textarea = document.createElement("textarea"); + textarea.value = text; + searchPopup.appendChild(textarea); + textarea.focus(); + textarea.select(); + + document.execCommand('copy'); + + searchPopup.removeChild(textarea); + document.getElementById('search-input').focus(); +} + +/* Only in case we're running in a browser. Why a simple if(document) doesn't + work is beyond me. */ /* istanbul ignore if */ +if(typeof document !== 'undefined') { + document.getElementById('search-input').oninput = function(event) { + Search.searchAndRender(document.getElementById('search-input').value); + }; + + document.onkeydown = function(event) { + /* Search shown */ + if(window.location.hash == '#search') { + /* Close the search */ + if(event.key == 'Escape') { + hideSearch(); + + /* Focus the search input, if not already, using T or Tab */ + } else if((!document.activeElement || document.activeElement.id != 'search-input') && (event.key.toLowerCase() == 't' || event.key == 'Tab') && !event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey) { + document.getElementById('search-input').focus(); + return false; /* so T doesn't get entered into the box */ + + /* Fill in the autocompleted selection */ + } else if(event.key == 'Tab' && !event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey) { + /* But only if the input has selection at the end */ + let input = document.getElementById('search-input'); + if(input.selectionEnd == input.value.length && input.selectionStart != input.selectionEnd) { + input.setSelectionRange(input.value.length, input.value.length); + return false; /* so input won't lose focus */ + } + + /* Select next item */ + } else if(event.key == 'ArrowDown') { + let current = document.getElementById('search-current'); + if(current) { + let next = current.nextSibling; + if(next) { + current.id = ''; + next.id = 'search-current'; + next.scrollIntoView(false); + } + } + return false; /* so the keypress doesn't affect input cursor */ + + /* Select prev item */ + } else if(event.key == 'ArrowUp') { + let current = document.getElementById('search-current'); + if(current) { + let prev = current.previousSibling; + if(prev) { + current.id = ''; + prev.id = 'search-current'; + prev.scrollIntoView(false); + } + } + return false; /* so the keypress doesn't affect input cursor */ + + /* Go to result (if any) */ + } else if(event.key == 'Enter') { + let result = document.getElementById('search-current'); + if(result) { + result.firstElementChild.click(); + + /* We might be staying on the same page, so restore scrollbar, + and prevent page layout jumps */ + document.body.style.overflow = 'auto'; + document.body.style.paddingRight = '0'; + } + return false; /* so the form doesn't get sent */ + + /* Copy (Markdown) link to keyboard */ + } else if((event.key.toLowerCase() == 'l' || event.key.toLowerCase() == 'm') && event.metaKey) { + let result = document.getElementById('search-current'); + if(result) { + let plain = event.key.toLowerCase() == 'l'; + let link = plain ? result.firstElementChild.href : + '[' + result.firstElementChild.dataset.mdLinkTitle + '](' + result.firstElementChild.href + ')'; + + copyToKeyboard(link); + + /* Add CSS class to the element for visual feedback (this + will get removed on keyup), but only if it's not already + there (in case of key repeat, e.g.) */ + if(result.className.indexOf('m-doc-search-copied') == -1) + result.className += ' m-doc-search-copied'; + console.log("Copied " + (plain ? "link" : "Markdown link") + " to " + result.firstElementChild.dataset.mdLinkTitle); + } + + return false; /* so L doesn't get entered into the box */ + + /* Looks like the user is inserting some text (and not cutting, + copying or whatever), allow autocompletion for the new + character. The oninput event resets this back to false, so this + basically whitelists only keyboard input, including Shift-key + and special chars using right Alt (or equivalent on Mac), but + excluding Ctrl-key, which is usually not for text input. In the + worst case the autocompletion won't be allowed ever, which is + much more acceptable behavior than having no ability to disable + it and annoying the users. */ + } else if(event.key != 'Backspace' && event.key != 'Delete' && !event.metaKey && (!event.ctrlKey || event.altKey) + /* Don't ever attempt autocompletion with Android virtual + keyboards, as those report all `event.key`s as + `Unidentified` (on Chrome) or `Process` (on Firefox) with + `event.code` 229 and thus we have no way to tell if a text + is entered or deleted. See this WONTFIX bug for details: + https://bugs.chromium.org/p/chromium/issues/detail?id=118639 + Couldn't find any similar bugreport for Firefox, but I + assume the virtual keyboard is to blame. + + An alternative is to hook into inputEvent, which has the + data, but ... there's more cursed issues right after that: + + - setSelectionRange() in Chrome on Android only renders + stuff, but doesn't actually act as such. Pressing + Backspace will only remove the highlight, but the text + stays here. Only delay-calling it through a timeout will + work as intended. Possibly related SO suggestion (back + then not even the rendering worked properly): + https://stackoverflow.com/a/13235951 + Possibly related Chrome bug: + https://bugs.chromium.org/p/chromium/issues/detail?id=32865 + + - On Firefox Mobile, programmatically changing an input + value (for the autocompletion highlight) will trigger an + input event, leading to search *and* autocompletion being + triggered again. Ultimately that results in newly typed + characters not replacing the autocompletion but rather + inserting before it, corrupting the searched string. This + event has to be explicitly ignored. + + - On Firefox Mobile, deleting a highlight with the + backspace key will result in *three* input events instead + of one: + 1. `deleteContentBackward` removing the selection (same + as Chrome or desktop Firefox) + 2. `deleteContentBackward` removing *the whole word* + that contained the selection (or the whole text if + it's just one word) + 3. `insertCompositionText`, adding the word back in, + resulting in the same state as (1). + I have no idea WHY it has to do this (possibly some + REALLY NASTY workaround to trigger correct font shaping?) + but ultimately it results in the autocompletion being + added again right after it got deleted, making this whole + thing VERY annoying to use. + + I attempted to work around the above, but it resulted in a + huge amount of browser-specific code that achieves only 90% + of the goal, with certain corner cases still being rather + broken (such as autocompletion randomly triggering when + erasing the text, even though it shouldn't). So disabling + autocompletion on this HELLISH BROKEN PLATFORM is the best + option at the moment. */ + && event.key != 'Unidentified' && event.key != 'Process' + ) { + Search.autocompleteNextInputEvent = true; + /* Otherwise reset the flag, because when the user would press e.g. + the 'a' key and then e.g. ArrowRight (which doesn't trigger + oninput), a Backspace after would still result in + autocompleteNextInputEvent, because nothing reset it back. */ + } else { + Search.autocompleteNextInputEvent = false; + } + + /* Search hidden */ + } else { + /* Open the search on the T or Tab key */ + if((event.key.toLowerCase() == 't' || event.key == 'Tab') && !event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey) { + showSearch(); + return false; /* so T doesn't get entered into the box */ + } + } + }; + + document.onkeyup = function(event) { + /* Remove highlight after key is released after a link copy */ + if((event.key.toLowerCase() == 'l' || event.key.toLowerCase() == 'm') && event.metaKey) { + let result = document.getElementById('search-current'); + if(result) result.className = result.className.replace(' m-doc-search-copied', ''); + } + }; + + /* Allow selecting items by mouse hover only after it moves once the + results are populated. This prevents a random item getting selected if + the cursor is left motionless over the result area. */ + document.getElementById('search-results').onmousemove = function() { + Search.mouseMovedSinceLastRender = true; + }; + + /* If #search is already present in the URL, hide the scrollbar etc. for a + consistent experience */ + if(window.location.hash == '#search') updateForSearchVisible(); +} + +/* For Node.js testing */ /* istanbul ignore else */ +if(typeof module !== 'undefined') { module.exports = { Search: Search }; } diff --git a/searchdata-v2.js b/searchdata-v2.js new file mode 100644 index 0000000..3d26026 --- /dev/null +++ b/searchdata-v2.js @@ -0,0 +1,2 @@ +/* Generated by https://mcss.mosra.cz/documentation/doxygen/. Do not edit. */ +Search.load('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