/**************************************************************************/
/*                                                                        */
/*                                 OCaml                                  */
/*                                                                        */
/*                 Benedikt Meurer, University of Siegen                  */
/*                                                                        */
/*   Copyright 1998 Institut National de Recherche en Informatique et     */
/*     en Automatique.                                                    */
/*   Copyright 2012 Benedikt Meurer.                                      */
/*                                                                        */
/*   All rights reserved.  This file is distributed under the terms of    */
/*   the GNU Lesser General Public License version 2.1, with the          */
/*   special exception on linking described in the file LICENSE.          */
/*                                                                        */
/**************************************************************************/

/* Asm part of the runtime system, ARM processor */
/* Must be preprocessed by cpp */

#include "caml/m.h"

        .syntax unified
        .text
#if defined(SYS_linux_eabihf) && defined(MODEL_armv6)
        .arch   armv6
        .fpu    vfpv2
        .arm

    /* Compatibility macros */
        .macro  cbz reg, lbl
        cmp     \reg, #0
        beq     \lbl
        .endm
#elif defined(SYS_linux_eabihf)
        .arch   armv7-a
        .fpu    vfpv3-d16
        .thumb
#elif defined(SYS_linux_eabi)
        .arch   armv4t
        .arm

    /* Compatibility macros */
        .macro  blx reg
        mov     lr, pc
        bx      \reg
        .endm
        .macro  cbz reg, lbl
        cmp     \reg, #0
        beq     \lbl
        .endm
#elif defined(SYS_netbsd)

  #if defined(MODEL_armv6)
        .arch   armv6
        .fpu    vfpv2
        .arm

    /* Compatibility macros */
        .macro  cbz reg, lbl
        cmp     \reg, #0
        beq     \lbl
        .endm
  #elif defined(MODEL_armv7)
        .arch   armv7-a
        .fpu    vfpv3-d16
        .thumb
  #else
    #error "Only NetBSD eabihf supported"
  #endif

#elif defined(SYS_freebsd)
        .arch   armv6
        .arm

    /* Compatibility macros */
        .macro  cbz reg, lbl
        cmp     \reg, #0
        beq     \lbl
        .endm
#endif

trap_ptr          .req    r8
alloc_ptr         .req    r10
domain_state_ptr  .req    r11

/* Support for CFI directives */

#if defined(ASM_CFI_SUPPORTED)
#define CFI_STARTPROC .cfi_startproc
#define CFI_ENDPROC .cfi_endproc
#define CFI_ADJUST(n) .cfi_adjust_cfa_offset n
#define CFI_REGISTER(r1,r2) .cfi_register r1,r2
#define CFI_OFFSET(r,n) .cfi_offset r,n
#else
#define CFI_STARTPROC
#define CFI_ENDPROC
#define CFI_ADJUST(n)
#define CFI_REGISTER(r1,r2)
#define CFI_OFFSET(r,n)
#endif

#if defined(FUNCTION_SECTIONS)
#define TEXT_SECTION(name) .section .text.caml.##name,"ax",%progbits
#else
#define TEXT_SECTION(name)
#endif

#define FUNCTION(name) \
        TEXT


roomID, userID, deviceID string,
	posUpdate types.StreamingToken,
) {
	n.lock.Lock()
	defer n.lock.Unlock()

	n.currPos.ApplyUpdates(posUpdate)
	n._addPeekingDevice(roomID, userID, deviceID)

	// we don't wake up devices here given the roomserver consumer will do this shortly afterwards
	// by calling OnNewEvent.
}

func (n *Notifier) OnRetirePeek(
	roomID, userID, deviceID string,
	posUpdate types.StreamingToken,
) {
	n.lock.Lock()
	defer n.lock.Unlock()

	n.currPos.ApplyUpdates(posUpdate)
	n._removePeekingDevice(roomID, userID, deviceID)

	// we don't wake up devices here given the roomserver consumer will do this shortly afterwards
	// by calling OnRetireEvent.
}

func (n *Notifier) OnNewSendToDevice(
	userID string, deviceIDs []string,
	posUpdate types.StreamingToken,
) {
	n.lock.Lock()
	defer n.lock.Unlock()

	n.currPos.ApplyUpdates(posUpdate)
	n._wakeupUserDevice(userID, deviceIDs, n.currPos)
}

// OnNewReceipt updates the current position
func (n *Notifier) OnNewTyping(
	roomID string,
	posUpdate types.StreamingToken,
) {
	n.lock.Lock()
	defer n.lock.Unlock()

	n.currPos.ApplyUpdates(posUpdate)
	n._wakeupUsers(n._joinedUsers(roomID), nil, n.currPos)
}

// OnNewReceipt updates the current position
func (n *Notifier) OnNewReceipt(
	roomID string,
	posUpdate types.StreamingToken,
) {
	n.lock.Lock()
	defer n.lock.Unlock()

	n.currPos.ApplyUpdates(posUpdate)
	n._wakeupUsers(n._joinedUsers(roomID), nil, n.currPos)
}

func (n *Notifier) OnNewKeyChange(
	posUpdate types.StreamingToken, wakeUserID, keyChangeUserID string,
) {
	n.lock.Lock()
	defer n.lock.Unlock()

	n.currPos.ApplyUpdates(posUpdate)
	n._wakeupUsers([]string{wakeUserID}, nil, n.currPos)
}

func (n *Notifier) OnNewInvite(
	posUpdate types.StreamingToken, wakeUserID string,
) {
	n.lock.Lock()
	defer n.lock.Unlock()

	n.currPos.ApplyUpdates(posUpdate)
	n._wakeupUsers([]string{wakeUserID}, nil, n.currPos)
}

func (n *Notifier) OnNewNotificationData(
	userID string,
	posUpdate types.StreamingToken,
) {
	n.lock.Lock()
	defer n.lock.Unlock()

	n.currPos.ApplyUpdates(posUpdate)
	n._wakeupUsers([]string{userID}, nil, n.currPos)
}

func (n *Notifier) OnNewPresence(
	posUpdate types.StreamingToken, userID string,
) {
	n.lock.Lock()
	defer n.lock.Unlock()

	n.currPos.ApplyUpdates(posUpdate)
	sharedUsers := n._sharedUsers(userID)
	sharedUsers = append(sharedUsers, userID)

	n._wakeupUsers(sharedUsers, nil, n.currPos)
}

func (n *Notifier) SharedUsers(userID string) []string {
	n.lock.RLock()
	defer n.lock.RUnlock()
	return n._sharedUsers(userID)
}

func (n *Notifier) _sharedUsers(userID string) []string {
	n._sharedUserMap[userID] = struct{}{}
	for roomID, users := range n.roomIDToJoinedUsers {
		if ok := users.isIn(userID); !ok {
			continue
		}
		for _, userID := range n._joinedUsers(roomID) {
			n._sharedUserMap[userID] = struct{}{}


l) return 0;
        if(this.currentGameLevel != this.unlockedGameLevel) return 0;

        cc.sys.localStorage.setItem(unlockedGameLevelKey, ++this.unlockedGameLevel)
        this.isUnlockAction = true;

        return this.unlockedGameLevel;
    }
}

export default new userData();
import {Pipe, PipeTransform} from "@angular/core";

import { Contact } from "../models/contact";

@Pipe({
  name: 'search'
})

export class SearchPipe implements PipeTransform{
  transform(contactList: Contact[], args: string){
    return contactList.filter((item)=> item.firstName.toUpperCase().indexOf( args.toUpperCase() ) > -1 );
  }
}
import axios from "axios";
import {ContentErrorInfo, errorInfo, successInfo, sysErrorInfo, sysSuccessInfo, warningInfo} from "./Info";

// Create an instance using the config defaults provided by the library
// At this point the timeout config value is `0` as is the default for the library
const axio = axios.create({
    headers: {
        "Content-Type": "application/json;charset=UTF-8"
    }
});

// Override timeout default for the library
// Now all requests using this instance will wait 2.5 seconds before timing out
axio.defaults.timeout = 200000;
axio.defaults.withCredentials = true;

axio.interceptors.response.use(response => {
        const hasData = response && response.data;

        /*     if (hasData && response.data.retCode === 103) {
                 // console.log("由于103未登录，所以到了登录页面");
                 history.push("/login");
                 response.data = {}
                 return Promise.reject();
             }*/

        // 当服务器返回result结果为0的时候，抛出异常
        if (hasData && response.data.result === 0) {
            // 弹出系统异常
            // sysErrorInfo();
            //message.info(response.data.retMsg);
            warningInfo(response.data.retMsg);
            return Promise.reject();
        }

    sysSuccessInfo(response.data.retMsg);
        return response.data;
    }, error => {
        let message = '服务器出错'
        if (error && error.response) {
            console.log(error.response.data)
            switch (error.response.status) {
                case 400:
                    message = error.response.data.retMsg + error.response.data.retObj
                    break
                case 401:
                    message = '未授权，请登录'
                    break

                case 403:
                    message = '拒绝访问'
                    break

                case 404:
                    message = '请求的接口不存在'
                    break

                case 408:
                    message = '请求超时'
                    break

                case 500:
                    message = '服务器内部错误'
                    break

                case 501:
                    message = '服务未实现'
                    break

                case 502:
                    message = '网关错误'
                    break

                case 503:
                    message = '服务不可用'
                    break

                case 504:
                    message = '网关超时'
                    break

                case 505:
                    message = 'HTTP版本不受支持'
                    break

                default:
                    break
            }
        } else {
            message = '您的网络不通，请检查您的网络'
        }
    sysErrorInfo(message);
        return Promise.reject(message)

    }
);
// Override timeout for this request as it's known to take a long time
export default axio;
import { Client } from 'cassandra-driver';

/**
 * Checks if the current


auto window = icvFindWindowByName(name);
    if (!window)
        CV_Error_(Error::StsNullPtr, ("NULL window: '%s'", name));

    Rect r = getImageRect_(*window);

    CvRect result = cvRect(r.x, r.y, r.width, r.height);
    return result;
}

static Rect getImageRect_(CvWindow& window)
{
    RECT rect = { 0 };
    GetClientRect(window.hwnd, &rect);
    POINT pt = {rect.left, rect.top};
    ClientToScreen(window.hwnd, &pt);
    Rect result(pt.x, pt.y, rect.right - rect.left, rect.bottom - rect.top);
    return result;
}

double cvGetModeWindow_W32(const char* name)//YV
{
    CV_FUNCNAME("cvGetModeWindow_W32");

    AutoLock lock(getWindowMutex());

    if (!name)
        CV_Error(Error::StsNullPtr, "NULL name string");

    auto window = icvFindWindowByName(name);
    if (!window)
        CV_Error_(Error::StsNullPtr, ("NULL window: '%s'", name));

    return window->status;
}

static bool setModeWindow_(CvWindow& window, int mode);

void cvSetModeWindow_W32(const char* name, double prop_value)//Yannick Verdie
{
    CV_FUNCNAME("cvSetModeWindow_W32");

    AutoLock lock(getWindowMutex());

    if (!name)
        CV_Error(Error::StsNullPtr, "NULL name string");

    auto window = icvFindWindowByName(name);
    if (!window)
         CV_Error_(Error::StsNullPtr, ("NULL window: '%s'", name));

    (void)setModeWindow_(*window, (int)prop_value);
}

static bool setModeWindow_(CvWindow& window, int mode)
{
    if (window.flags & CV_WINDOW_AUTOSIZE)//if the flag CV_WINDOW_AUTOSIZE is set
        return false;

    if (window.status == mode)
        return true;

    {
        DWORD dwStyle = (DWORD)GetWindowLongPtr(window.frame, GWL_STYLE);
        CvRect position;

        if (window.status == CV_WINDOW_FULLSCREEN && mode == CV_WINDOW_NORMAL)
        {
            icvLoadWindowPos(window.name.c_str(), position);
            SetWindowLongPtr(window.frame, GWL_STYLE, dwStyle | WS_CAPTION | WS_THICKFRAME);

            SetWindowPos(window.frame, HWND_TOP, position.x, position.y , position.width,position.height, SWP_NOZORDER | SWP_FRAMECHANGED);
            window.status=CV_WINDOW_NORMAL;

            return true;
        }

        if (window.status == CV_WINDOW_NORMAL && mode == CV_WINDOW_FULLSCREEN)
        {
            //save dimension
            RECT rect = { 0 };
            GetWindowRect(window.frame, &rect);
            CvRect rectCV = cvRect(rect.left, rect.top,rect.right - rect.left, rect.bottom - rect.top);
            icvSaveWindowPos(window.name.c_str(), rectCV);

            //Look at coordinate for fullscreen
            HMONITOR hMonitor;
            MONITORINFO mi;
            hMonitor = MonitorFromRect(&rect, MONITOR_DEFAULTTONEAREST);

            mi.cbSize = sizeof(mi);
            GetMonitorInfo(hMonitor, &mi);

            //fullscreen
            position.x=mi.rcMonitor.left;position.y=mi.rcMonitor.top;
            position.width=mi.rcMonitor.right - mi.rcMonitor.left;position.height=mi.rcMonitor.bottom - mi.rcMonitor.top;
            SetWindowLongP


анные позже, затирают свойства, указанные ранее. Например, во фразе [красивого|hero] [hero|вн] не будет установлен винительный падеж прилагательного, так как он заменится именительным падежом переменной hero.

Свойства слов

  {% for property_group in UTG_PROPERTY_TYPE.records|sort(attribute="text") %}

          {{property_group.text|up_first}}

          {% if property_group.is_DEPENDENCY_MODE %}

            Вид зависимости определяет как будет изменяться слово, зависимое от другого. Полная зависимость означает, что слово изменит и семантические и морфологические свойства. Семантическая — только семантические. По умолчанию для слова используется полная зависимость.

            Для пример, если у вас есть слова, зависимые от числительного, то во фразах:

«5 красивых хомячков побежали в норку» — необходима полная зависимость, так как числительное употребляется в предложении и необходимо изменять морфологию слова;

«Красивые хомячки побежали в норку» — необходима только семантическая зависимость, так как нам интересно только количество хомячков (один или много), но не надо согласовывать их с точным значением числительного;

«Красивые 5 хомячков побежали в норку» — необходима полная зависимость слова «хомячки», но только семантическая зависимость слова «красивые».

          {% endif %}

                сокращение
                свойство

              {% for property in property_group.relation.records %}

                  {{property.verbose_id}}
                  {{property.text}}

              {% endfor %}

  {% endfor %}

{% endblock %}
{% import 'game/macros.html' as macros with context %}


# Test the frozen module defined in frozen.c.

from test.support import captured_stdout, run_unittest
import unittest
import sys, os

class FrozenTests(unittest.TestCase):
    def test_frozen(self):
        try:
            import __hello__
        except ImportError as x:
            self.fail("import __hello__ failed:" + str(x))
        self.assertEqual(__hello__.initialized, True)
        self.assertEqual(len(dir(__hello__)), 6, dir(__hello__))

        try:
            import __phello__
        except ImportError as x:
            self.fail("import __phello__ failed:" + str(x))
        self.assertEqual(__phello__.initialized, True)
        if not "__phello__.spam" in sys.modules:
            self.assertEqual(len(dir(__phello__)), 7, dir(__phello__))
        else:
            self.assertEqual(len(dir(__phello__)), 8, dir(__phello__))
        self.assertEqual(__phello__.__path__, [__phello__.__name__])

        try:
            import __phello__.spam
        except ImportError as x:
            self.fail("import __phello__.spam failed:" + str(x))
        self.assertEqual(__phello__.spam.initialized, True)
        self.assertEqual(len(dir(__phello__.spam)), 6)
        self.assertEqual(len(dir(__phello__)), 8)

        try:
            import __phello__.foo
        except ImportError:
            pass
        else:
            self.fail("import __phello__.foo should have failed")

            if sys.platform != "mac":  # On the Mac this import does succeed.
                try:
                    import __phello__.foo
                except ImportError:
                    pass
                else:
                    self.fail("import __phello__.foo should have failed")

        del sys.modules['__hello__']
        del sys.modules['__phello__']
        del sys.modules['__phello__.spam']

def test_main():
    run_unittest(FrozenTests)

if __name__ == "__main__":
    test_main()


ерированного

## Способы вставки длинного тире в LibreOffice Writer:

1. **Через автозамену**:
    - Откройте «Сервис» → «Параметры автозамены» → «Параметры»
    - Включите опцию «Заменять дефисы на тире»
    - Введите два дефиса подряд — они автоматически заменятся на длинное тире
2. **Через Alt-код**:
    - Зажмите клавишу **Alt**
    - Введите на цифровой клавиатуре **0151**
    - Отпустите **Alt**
3. **Альтернативный способ**:
    - Для короткого тире используйте комбинацию **Alt+150**

## Способы вставки длинного тире в MS Word

1. **Комбинация клавиш**:
	- **Alt + Ctrl + минус** (на цифровой клавиатуре)
	- **Alt + 0151** (на цифровой клавиатуре)
2. **Шестнадцатеричный код**:
	- Введите **2014** и нажмите **Alt + X**
3. **Через меню**:
	- Перейдите во вкладку **«Вставка»**
	- Выберите **«Символ» → «Другие символы»**
	- Найдите длинное тире в списке
4. **Автозамена**:
	- Настройте замену двух дефисов на длинное тире в параметрах автозамены
	- Откройте **«Файл» → «Параметры» → «Правописание»**
	- Нажмите **«Параметры автозамены»**
	- Добавьте правило замены

## Особенности форматирования:

- Длинное тире всегда **окружается пробелами** с обеих сторон
- Не путайте с коротким тире (–) и дефисом (-)
- В некоторых случаях может потребоваться отключение автоматического форматирования

> [!HINT] Совет
> Правильное использование длинного тире — важный элемент профессионального оформления текста, особенно в деловой документации, научных работах и издательской деятельности.
---
тема: Текстовый процессор
автор: Иван Юрьевич Потылицын
дата: 2025-09-09
---

> [!INFO] Определение
> **Перекрестная ссылка** — это специальный элемент документа, который создает связь между различными частями текста и позволяет быстро переходить между ними. Такая ссылка является интерактивной: при клике пользователь мгновенно перемещается к нужному фрагменту.
## Основные возможности

Пер


 });

    if (_segmentsToCharsSIMPLEBrailleFrench
            .map((key, value) => MapEntry(key.join(), value.toString()))[input.split('').join()] ==
        null) {
      char += UNKNOWN_ELEMENT;
    } else {
      charH = _segmentsToCharsSIMPLEBrailleFrench
              .map((key, value) => MapEntry(key.join(), value.toString()))[input.split('').join()] ??
          '';
      if (charH == 'NUMBERFOLLOWS') {
        char += '<NUMBER FOLLOWS>';
        _numberFollows = true;
      } else if (charH == 'ANTOINENUMBERFOLLOWS') {
        char += '<ANTOINE NUMBER FOLLOWS>';
        _antoinenumberFollows = true;
        _numberFollows = false;
      } else if (charH == ' ') {
        _numberFollows = false;
        _antoinenumberFollows = false;
        char += charH;
      } else {
        // no switch but char to analyze
        if (_numberFollows) {
          if (_LetterToDigit[charH] == null) {
            _numberFollows = false;
          } else {
            charH = _LetterToDigit[charH] ?? '';
          }
        } else if (_antoinenumberFollows) {
          if (_AntoineToDigit[charH] == null) {
            _numberFollows = false;
          } else {
            charH = _AntoineToDigit[charH] ?? '';
          }
        } else if (_AntoineLetters.contains(charH)) {
          charH = UNKNOWN_ELEMENT;
        }

        char += charH;
      }
    }
    displays.add(display);

    return char;
  }).toList();
  return SegmentsChars(displays: displays, chars: text);
}

SegmentsChars _decodeBrailleDEU(List<String> inputs) {
  var displays = <List<String>>[];

  bool numberFollows = false;
  bool capitalFollows = false;
  bool oneCapitalFollows = false;

  String input = '';
  String charH = '';
  List<String> text = [];
  int maxLength = inputs.length;

  // Build Map for decoding
  Map<String, String> BrailleToChar = <String, String>{};
  switchMapKeyValue(_CharsToSegmentsLetters[BrailleLanguage.DEU] ?? {}).forEach((key, value) {
    BrailleToChar[key.join().toString()] = value.toString();
  });
  switchMapKeyValue(_CharsToSegmentsSymbols[BrailleLanguage.DEU] ?? {}).forEach((key, value) {
    BrailleToChar[key.join().toString()] = value.toString();
  });
  switchMapKeyValue(_CharsToSegmentsSwitches[BrailleLanguage.DEU] ?? {}).forEach((key, value) {
    BrailleToChar[key.join().toString()] = value.toString();
  });
  switchMapKeyValue(_CharsToSegmentsModifier[BrailleLanguage.DEU] ?? {}).forEach((key, value) {
    BrailleToChar[key.join().toString()] = value.toString();
  });
  switchMapKeyValue(_CharsToSegmentsLetters[BrailleLanguage.STD] ?? {}).forEach((key, value) {
    BrailleToChar[key.join().toString()] = value.toString();
  });
  switchMapKeyValue(_CharsToSegmentsSymbols[BrailleLanguage.STD] ?? {}).forEach((key, value) {
    BrailleToChar[key.join().toString()] = value.toString();
  });

  for (int i = 0; i < maxLength; i++) {
    input = inputs[i];

    // Build displays
    var display = <String>[];
    input.split('').forEach((element) {
      display.add(element);
    });
    displays.add(display);

    // Build text
    if (BrailleToChar


] = (short)(l & 0xFFFF);
    }
  }

  static void test_pack4(long[] p4, short[] a1) {
    if (p4.length*4 > a1.length) return;
    for (int i = 0; i < p4.length; i+=1) {
      long l0 = (long)a1[i*4+0];
      long l1 = (long)a1[i*4+1];
      long l2 = (long)a1[i*4+2];
      long l3 = (long)a1[i*4+3];
      p4[i] = (l0 & 0xFFFFl) |
             ((l1 & 0xFFFFl) << 16) |
             ((l2 & 0xFFFFl) << 32) |
             ((l3 & 0xFFFFl) << 48);
    }
  }
  static void test_unpack4(short[] a0, long[] p4) {
    if (p4.length*4 > a0.length) return;
    for (int i = 0; i < p4.length; i+=1) {
      long l = p4[i];
      a0[i*4+0] = (short)(l & 0xFFFFl);
      a0[i*4+1] = (short)(l >> 16);
      a0[i*4+2] = (short)(l >> 32);
      a0[i*4+3] = (short)(l >> 48);
    }
  }
  static void test_pack4_swap(long[] p4, short[] a1) {
    if (p4.length*4 > a1.length) return;
    for (int i = 0; i < p4.length; i+=1) {
      long l0 = (long)a1[i*4+0];
      long l1 = (long)a1[i*4+1];
      long l2 = (long)a1[i*4+2];
      long l3 = (long)a1[i*4+3];
      p4[i] = (l3 & 0xFFFFl) |
             ((l2 & 0xFFFFl) << 16) |
             ((l1 & 0xFFFFl) << 32) |
             ((l0 & 0xFFFFl) << 48);
    }
  }
  static void test_unpack4_swap(short[] a0, long[] p4) {
    if (p4.length*4 > a0.length) return;
    for (int i = 0; i < p4.length; i+=1) {
      long l = p4[i];
      a0[i*4+0] = (short)(l >> 48);
      a0[i*4+1] = (short)(l >> 32);
      a0[i*4+2] = (short)(l >> 16);
      a0[i*4+3] = (short)(l & 0xFFFFl);
    }
  }

  static int verify(String text, int i, short elem, short val) {
    if (elem != val) {
      System.err.println(text + "[" + i + "] = " + elem + " != " + val);
      return 1;
    }
    return 0;
  }

  static int verify(String text, int i, int elem, int val) {
    if (elem != val) {
      System.err.println(text + "[" + i + "] = " + Integer.toHexString(elem) + " != " + Integer.toHexString(val));
      return 1;
    }
    return 0;
  }

  static int verify(String text, int i, long elem, long val) {
    if (elem != val) {
      System.err.println(text + "[" + i + "] = " + Long.toHexString(elem) + " != " + Long.toHexString(val));


_unlink_device_request" ],
    [ "Nakama.Console.IConsoleUserList", "interface_nakama_1_1_console_1_1_i_console_user_list.html", "interface_nakama_1_1_console_1_1_i_console_user_list" ],
    [ "Nakama.Console.IConsoleWalletLedger", "interface_nakama_1_1_console_1_1_i_console_wallet_ledger.html", "interface_nakama_1_1_console_1_1_i_console_wallet_ledger" ],
    [ "Nakama.Console.IConsoleWalletLedgerList", "interface_nakama_1_1_console_1_1_i_console_wallet_ledger_list.html", "interface_nakama_1_1_console_1_1_i_console_wallet_ledger_list" ],
    [ "Nakama.Console.IConsoleWriteStorageObjectRequest", "interface_nakama_1_1_console_1_1_i_console_write_storage_object_request.html", "interface_nakama_1_1_console_1_1_i_console_write_storage_object_request" ],
    [ "Nakama.Console.INakamaapiAccount", "interface_nakama_1_1_console_1_1_i_nakamaapi_account.html", "interface_nakama_1_1_console_1_1_i_nakamaapi_account" ],
    [ "Nakama.Console.INakamaconsoleAccount", "interface_nakama_1_1_console_1_1_i_nakamaconsole_account.html", "interface_nakama_1_1_console_1_1_i_nakamaconsole_account" ],
    [ "Nakama.Console.INakamaconsoleUpdateAccountRequest", "interface_nakama_1_1_console_1_1_i_nakamaconsole_update_account_request.html", "interface_nakama_1_1_console_1_1_i_nakamaconsole_update_account_request" ],
    [ "Nakama.Console.IProtobufAny", "interface_nakama_1_1_console_1_1_i_protobuf_any.html", "interface_nakama_1_1_console_1_1_i_protobuf_any" ],
    [ "Nakama.Console.IRuntimeError", "interface_nakama_1_1_console_1_1_i_runtime_error.html", "interface_nakama_1_1_console_1_1_i_runtime_error" ]
];var NAVTREEINDEX4 =
{
"class_satori_1_1_http_request_adapter.html#a6736d4ab9046b2b991c1a0e7260f8def":[1,0,1,4,2],
"class_satori_1_1_http_request_adapter.html#a6736d4ab9046b2b991c1a0e7260f8def":[2,0,1,3,2],
"class_satori_1_1_http_request_adapter.html#a68c34ab8213a4658b431c1d28646dc9a":[1,0,1,4,1],
"class_satori_1_1_http_request_adapter.html#a68c34ab8213a4658b431c1d28646dc9a":[2,0,1,3,1],
"class_satori_1_1_


=pos.y+i-math.random(2), z=pos.z-1})
				end
				if i < 0 then
					check_add_node({x=pos.x+1, y=pos.y+i-math.random(2), z=pos.z}, {name="lottplants:mallorntree"})
					check_add_node({x=pos.x, y=pos.y+i-math.random(2), z=pos.z+1}, {name="lottplants:mallorntree"})
					check_add_node({x=pos.x-1, y=pos.y+i-math.random(2), z=pos.z}, {name="lottplants:mallorntree"})
					check_add_node({x=pos.x, y=pos.y+i-math.random(2), z=pos.z-1}, {name="lottplants:mallorntree"})
				end
				if (math.sin(i/height*i) < 0.2 and i > 3 and math.random(0,2) < 1.5) then
					local branch_pos = {x=pos.x+math.random(0,1), y=pos.y+i, z=pos.z-math.random(0,1)}
					add_tree_branch_mallorn(branch_pos)
				end
			end
		else
			for i = height, -5, -1 do
				if (math.sin(i/height*i) < 0.2 and i > 3 and math.random(0,2) < 1.5) then
					local branch_pos = {x=pos.x+math.random(0,1), y=pos.y+i, z=pos.z-math.random(0,1)}
					add_tree_branch_mallorn(branch_pos)
				end
				if i < math.random(0,1) then
					check_add_node({x=pos.x+1, y=pos.y+i, z=pos.z+1}, {name="lottplants:mallorntree"})
					check_add_node({x=pos.x+2, y=pos.y+i, z=pos.z-1}, {name="lottplants:mallorntree"})
					check_add_node({x=pos.x, y=pos.y+i, z=pos.z-2}, {name="lottplants:mallorntree"})
					check_add_node({x=pos.x-1, y=pos.y+i, z=pos.z}, {name="lottplants:mallorntree"})
				end
				if i == height then
					add_tree_branch_mallorn({x=pos.x+1, y=pos.y+i, z=pos.z+1})
					add_tree_branch_mallorn({x=pos.x+2, y=pos.y+i, z=pos.z-1})
					add_tree_branch_mallorn({x=pos.x, y=pos.y+i, z=pos.z-2})
					add_tree_branch_mallorn({x=pos.x-1, y=pos.y+i, z=pos.z})
					add_tree_branch_mallorn({x=pos.x+1, y=pos.y+i, z=pos.z+2})
					add_tree_branch_mallorn({x=pos.x+3, y=pos.y+i, z=pos.z-1})
					add_tree_branch_mallorn({x=pos.x, y=pos.y+i, z=pos.z-3})
					add_tree_branch_mallorn({x=pos.x-2, y=pos.y+i, z=pos.z})
					add_tree_branch_mallorn({x=pos.x+1, y=pos.y+i, z=pos.z})
					add_tree_branch_mallorn({x=pos.x+1, y=pos.y+i, z=pos.z-1})
					add_tree_branch_mallorn({x=pos.x, y=pos.y+i, z=pos.z-1})
					add_tree_bran


	| SCB_ITCMCR_RETEN_Msk);
	SCB->DTCMCR = ( SCB_DTCMCR_EN_Msk | SCB_DTCMCR_RMW_Msk
					| SCB_DTCMCR_RETEN_Msk);
	__DSB();
	__ISB();
}
#endif

/** \brief  TCM memory Disable

	The function enables TCM memories
 */
__STATIC_INLINE void TCM_Disable(void)
{

	__DSB();
	__ISB();
	SCB->ITCMCR &= ~(uint32_t)SCB_ITCMCR_EN_Msk;
	SCB->DTCMCR &= ~(uint32_t)SCB_ITCMCR_EN_Msk;
	__DSB();
	__ISB();
}

/**
 * \brief This is the code that gets called on processor reset.
 * To initialize the device, and call the main() routine.
 */
void Reset_Handler(void)
{
		uint32_t *pSrc, *pDest;

		/* Initialize the relocate segment */
		pSrc = &_etext;
		pDest = &_srelocate;

		if (pSrc != pDest) {
				for (; pDest < &_erelocate;) {
						*pDest++ = *pSrc++;
				}
		}

		/* Clear the zero segment */
		for (pDest = &_szero; pDest < &_ezero;) {
				*pDest++ = 0;
		}

		/* Set the vector table base address */
		pSrc = (uint32_t *) & _sfixed;
		SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);

	#ifdef ENABLE_TCM
	// 32 Kb
		EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_CGPB
						| EEFC_FCR_FARG(8));
		EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_SGPB
						| EEFC_FCR_FARG(7));

		TCM_Enable();
	#else
		EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_CGPB
						| EEFC_FCR_FARG(8));
		EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_CGPB
						| EEFC_FCR_FARG(7));

		TCM_Disable();
	#endif

		LowLevelInit();
		/* Initialize the C library */
		__libc_init_array();

		/* Branch to main function */
		main();

		/* Infinite loop */
		while (1);
}

/**
 * \brief Default interrupt handler for unused IRQs.
 */
void Dummy_Handler(void)
{
		while (1) {
		}
}


FaxOutgoingJob

IFaxOutgoingJob

Visual Basic Example---
UID: NF:faxcomex.IFaxConfiguration.get_ArchiveSizeHigh
title: IFaxConfiguration::get_ArchiveSizeHigh (faxcomex.h)
description: The value that specifies the high-order 32-bit value (in bytes) for the size of the fax message archive.
helpviewer_keywords: ["ArchiveSizeHigh property [Fax Service]","ArchiveSizeHigh property [Fax Service]","IFaxConfiguration interface","IFaxConfiguration interface [Fax Service]","ArchiveSizeHigh property","IFaxConfiguration.ArchiveSizeHigh","IFaxConfiguration.get_ArchiveSizeHigh","IFaxConfiguration::ArchiveSizeHigh","IFaxConfiguration::get_ArchiveSizeHigh","fax._mfax_ifaxconfiguration_archivesizehigh","faxcomex/IFaxConfiguration::ArchiveSizeHigh","faxcomex/IFaxConfiguration::get_ArchiveSizeHigh","get_ArchiveSizeHigh"]
old-location: fax\_mfax_ifaxconfiguration_archivesizehigh.htm
tech.root: Fax
ms.assetid: 3386ec80-be4e-4105-ab57-dd634b57f67f
ms.date: 12/05/2018
ms.keywords: ArchiveSizeHigh property [Fax Service], ArchiveSizeHigh property [Fax Service],IFaxConfiguration interface, IFaxConfiguration interface [Fax Service],ArchiveSizeHigh property, IFaxConfiguration.ArchiveSizeHigh, IFaxConfiguration.get_ArchiveSizeHigh, IFaxConfiguration::ArchiveSizeHigh, IFaxConfiguration::get_ArchiveSizeHigh, fax._mfax_ifaxconfiguration_archivesizehigh, faxcomex/IFaxConfiguration::ArchiveSizeHigh, faxcomex/IFaxConfiguration::get_ArchiveSizeHigh, get_ArchiveSizeHigh
req.header: faxcomex.h
req.include-header:
req.target-type: Windows
req.target-min-winverclnt: Windows Vista [desktop apps only]
req.target-min-winversvr: Windows Server 2008 [desktop apps only]
req.kmdf-ver:
req.umdf-ver:
req.ddi-compliance:
req.unicode-ansi:
req.idl: Faxcomex.idl
req.max-support:
req.namespace:
req.assembly:
req.type-library:
req.lib:
req.dll: Fxscomex.dll
req.irql:
targetos: Windows
req.typenames:
req.redist:
ms.custom: 19H1
f1_keywords:
 - IFaxConfiguration::get_ArchiveSizeHigh
 - faxcomex/IFaxConfiguration::get_ArchiveSizeHigh
dev_langs:
 - c++
topic_type:
 - APIRef
 - kbSyntax
api_type:
 - COM
api_location:
 - Fxscomex.dll
api_name:
 - IFaxConfiguration.ArchiveSizeHigh
 - IFaxConfiguration.get_ArchiveSizeHigh
---

# IFaxConfiguration::get_ArchiveSizeHigh

## -description

The value that specifies the high-order 32-bit value (in bytes) for the size of the fax message archive.

This property is read-only.

## -parameters

## -remarks

Because the archive may exceed 4 gigabytes (GB) in size, the archive size is described using two long values. ArchiveSizeLow is the low 32-bit value of the archive size. ArchiveSizeHigh is the


�录、查询、下载高光时刻弹幕
7. 弹幕发送速度实时可视化
8. 高频弹幕词云
9. ……待补充

## 运行

### 运行之前

1. 确认已安装`node.js`、`mysql`
2. `mysql`中创建数据库`create database dybarrage_pro;`
3. `mysql`中增加最大连接数`set GLOBAL max_connections=200;`（若在使用过程中出现`too many connections`错误，则继续增大最大连接数，这与你所抓取的直播间数量、流量有关）
4. 打开`dybarrage-server/src`中的`config.ts`文件，修改数据库连接用户名、密码

### 安装依赖

```bash
# dybarrage-server
npm install
# dybarrage-web
npm install
```

### 运行

```bash
# dybarrage-server
npm start
# dybarrage-web
npm start

# 若出现报错，应该是全局依赖没有装上，比如react-app-rewired、cross-env等，使用npm install <包名> -g安装即可，如npm install react-app-rewired -g
```

## 技术栈

All `TypeScript`！

> Any application that can be written in JavaScript, will eventually be written in JavaScript.  --Jeff Atwood

### 前端

`TypeScript, React, Ant Design, ECharts, socket.io-client, Axios`

### 后端

`TypeScript, Koa, Axios, socket.io, sequelize, MySQL, json-csv`

## 通讯

### WebSocket

1. 客户端发出单次消息

| 消息类型               | 说明                           | 携带数据 | 时机                                              |
| ---------------------- | ------------------------------ | -------- | ------------------------------------------------- |
| `add_room`             | 用于表明客户端身份（即房间号） | 房间号   | 客户端连接上服务器后发出                          |
| `start_crawl`          | 用于命令服务端开始抓取弹幕     |          | 用户在客户端点击“开始抓取”按钮后发出              |
| `stop_crawl`           | 用于命令服务端停止抓取弹幕     |          | 用户在客户端点击“停止抓取”按钮后发出              |
| `add_keyword`          | 用于命令服务端增加统计关键词   | 关键词   | 用户在客户端“关键词统计”界面增加关键词后发出      |
| `delete_keyword`       | 用于命令服务端删除统计关键词   | 关键词   | 用户在客户端“关键词统计”界面删除关键词后发出      |
| `request_send_dm`      | 用于命令服务端开始推送弹幕信息 |          | 用户在客户端打开弹幕墙后发出                      |
| `stop_send_dm`         | 用于命令服务端停


  0,
    )

    for record in additionals:
        out.add_additional_answer(
            DNSService(
                record["name"],  # type: ignore
                const._TYPE_SRV,
                const._CLASS_IN | const._CLASS_UNIQUE,
                const._DNS_HOST_TTL,
                0,
                0,
                record["port"],  # type: ignore
                record["name"],  # type: ignore
            )
        )
        out.add_additional_answer(
            DNSText(
                record["name"],  # type: ignore
                const._TYPE_TXT,
                const._CLASS_IN | const._CLASS_UNIQUE,
                const._DNS_OTHER_TTL,
                record["text"],  # type: ignore
            )
        )
        out.add_additional_answer(
            DNSAddress(
                record["name"],  # type: ignore
                const._TYPE_A,
                const._CLASS_IN | const._CLASS_UNIQUE,
                const._DNS_HOST_TTL,
                record["address"],  # type: ignore
            )
        )
        out.add_additional_answer(
            DNSNsec(
                record["name"],  # type: ignore
                const._TYPE_NSEC,
                const._CLASS_IN | const._CLASS_UNIQUE,
                const._DNS_OTHER_TTL,
                record["name"],  # type: ignore
                [const._TYPE_TXT, const._TYPE_SRV],
            )
        )

    return out.packets()

packets = generate_packets()

def parse_incoming_message() -> None:
    for packet in packets:
        DNSIncoming(packet).answers  # noqa: B018
        break

count = 100000
time = timeit.Timer(parse_incoming_message).timeit(count)
print(f"Parsing {count} incoming messages took {time} seconds")


*/
#ifdef CONFIG_6xx
	/* On PReP we must look at the OpenFirmware pointer and sanity
	 * test it.  On other platforms, we disable the MMU right now
	 * and other bits.
	 */
#ifdef CONFIG_PPC_PREP
/*
 * Save the OF pointer to r25, but only if the entry point is in a sane
 * location; if not we store 0.  If there is no entry point, or it is
 * invalid, we establish the default MSR value immediately.  Otherwise,
 * we defer doing that, to allow OF functions to be called, until we
 * begin uncompressing the kernel.
 */
	lis	r8,0x0fff		/* r8 = 0x0fffffff */
	ori	r8,r8,0xffff

	subc	r8,r8,r5		/* r8 = (r5 <= r8) ? ~0 : 0 */
	subfe	r8,r8,r8
	nand	r8,r8,r8

	and.	r5,r5,r8		/* r5 will be cleared if (r5 > r8) */
	bne+	haveOF

	li	r8,MSR_IP|MSR_FP	/* Not OF: set MSR immediately */
  	mtmsr	r8
	isync
haveOF:
	mr	r25,r5
#else
	bl	disable_6xx_mmu
#endif
	bl	disable_6xx_l1cache

	CLEAR_CACHES
#endif

#ifdef CONFIG_8xx
	mfmsr	r8		/* Turn off interrupts */
	li	r9,0
	ori	r9,r9,MSR_EE
	andc	r8,r8,r9
	mtmsr	r8

	/* We do this because some boot roms don't initialize the
	 * processor correctly. Don't do this if you want to debug
	 * using a BDM device.
	 */
	li	r4,0		/* Zero DER to prevent FRZ */
	mtspr	SPRN_DER,r4
#endif

#ifdef CONFIG_REDWOOD_4
	/* All of this Redwood 4 stuff will soon disappear when the
	 * boot rom is straightened out.
	 */
	mr	r29, r3		/* Easier than changing the other code */
	bl	HdwInit
	mr	r3, r29
#endif

#if defined(CONFIG_MBX) || defined(CONFIG_RPX8260) || defined(CONFIG_PPC_PREP)
	mr	r4,r29	/* put the board info pointer where the relocate
			 * routine will find it
			 */
#endif

#ifdef	CONFIG_MV64X60
	/* mv64x60 specific hook to do things like moving register base, etc. */
	bl	mv64x60_init
#endif

	/* Get the load address.
	*/
	subi	r3, r3, 4	/* Get the actual IP, not NIP */
	b	relocate


// permutation. For a detailed specification see http://keccak.noekeon.org/
//
//
// Guidance
//
// If you aren't sure what function you need, use SHAKE256 with at least 64
// bytes of output. The SHAKE instances are faster than the SHA3 instances;
// the latter have to allocate memory to conform to the hash.Hash interface.
//
// If you need a secret-key MAC (message authentication code), prepend the
// secret key to the input, hash with SHAKE256 and read at least 32 bytes of
// output.
//
//
// Security strengths
//
// The SHA3-x (x equals 224, 256, 384, or 512) functions have a security
// strength against preimage attacks of x bits. Since they only produce "x"
// bits of output, their collision-resistance is only "x/2" bits.
//
// The SHAKE-256 and -128 functions have a generic security strength of 256 and
// 128 bits against all attacks, provided that at least 2x bits of their output
// is used.  Requesting more than 64 or 32 bytes of output, respectively, does
// not increase the collision-resistance of the SHAKE functions.
//
//
// The sponge construction
//
// A sponge builds a pseudo-random function from a public pseudo-random
// permutation, by applying the permutation to a state of "rate + capacity"
// bytes, but hiding "capacity" of the bytes.
//
// A sponge starts out with a zero state. To hash an input using a sponge, up
// to "rate" bytes of the input are XORed into the sponge's state. The sponge
// is then "full" and the permutation is applied to "empty" it. This process is
// repeated until all the input has been "absorbed". The input is then padded.
// The digest is "squeezed" from the sponge in the same way, except that output
// output is copied out instead of input being XORed in.
//
// A sponge is parameterized by its generic security strength, which is equal
// to half its capacity; capacity + rate is equal to the permutation's width.
// Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means
// that the security strength of a sponge instance is equal to (1600 - bitrate) / 2.
//
//
// Recommendations
//
// The SHAKE functions are recommended for most new uses. They can produce
// output of arbitrary length. SHAKE256, with an output length of at least
// 64 bytes, provides 256-bit security against all attacks.  The Keccak team
// recommends it for most applications upgrading from SHA2-512. (NIST chose a
// much stronger, but much slower, sponge instance for SHA3-512.)
//
// The SHA-3 functions are "drop-in" replacements for the SHA-2 functions.
// They produce output of the same length, with the same security strengths
// against all attacks. This means, in particular, that SHA3-256 only has
// 128-bit collision resistance, because its output length is 32 bytes.
package sha3 // import "golang.org/x/crypto/sha3"
// Copyright 2011 The Go Auth


d by sub-classes of
 * #ClutterGestureAction during their construction phase.
 *
 * Since: 1.18
 */
void
clutter_gesture_action_set_threshold_trigger_distance (ClutterGestureAction      *action,
                                                       float                      x,
                                                       float                      y)
{
  g_return_if_fail (CLUTTER_IS_GESTURE_ACTION (action));

  if (fabsf (x - action->priv->distance_x) > FLOAT_EPSILON)
    {
      action->priv->distance_x = x;
      g_object_notify_by_pspec (G_OBJECT (action), gesture_props[PROP_THRESHOLD_TRIGGER_DISTANCE_X]);
    }

  if (fabsf (y - action->priv->distance_y) > FLOAT_EPSILON)
    {
      action->priv->distance_y = y;
      g_object_notify_by_pspec (G_OBJECT (action), gesture_props[PROP_THRESHOLD_TRIGGER_DISTANCE_Y]);
    }
}

/**
 * clutter_gesture_action_get_threshold_trigger_distance:
 * @action: a #ClutterGestureAction
 * @x: (out) (allow-none): The return location for the horizontal distance, or %NULL
 * @y: (out) (allow-none): The return location for the vertical distance, or %NULL
 *
 * Retrieves the threshold trigger distance of the gesture @action,
 * as set using clutter_gesture_action_set_threshold_trigger_distance().
 *
 * Since: 1.18
 */
void
clutter_gesture_action_get_threshold_trigger_distance (ClutterGestureAction *action,
                                                       float                *x,
                                                       float                *y)
{
  g_return_if_fail (CLUTTER_IS_GESTURE_ACTION (action));

  if (x != NULL)
    {
      if (action->priv->distance_x > 0.0)
        *x = action->priv->distance_x;
      else
        *x = gesture_get_default_threshold ();
    }
  if (y != NULL)
    {
      if (action->priv->distance_y > 0.0)
        *y = action->priv->distance_y;
      else
        *y = gesture_get_default_threshold ();
    }
}


rtance of Hydration for Runners. (2000). https://runners-handbook.com/the-importance-of-hydration-for-runners/

The Importance Of Proper Posture In Running. (2024). https://therunningadvisor.com/training-techniques/the-importance-of-proper-posture-in-running/

The Importance of Rest and Recovery for Runners. (2025). https://runningbrite.com/the-importance-of-rest-and-recovery-for-runners/

The Importance of Rest Days - Healthworks Fitness. (n.d.). https://healthworksfitness.com/blog/rest-days/

The Importance Of Rest Days: How To Avoid Overtraining. (n.d.). https://goaskuncle.com/the-importance-of-rest-days-how-to-avoid-overtraining/

The Pros and Cons of Running on Different Surfaces. (n.d.). https://www.ahealthiermichigan.org/stories/health-and-wellness/the-pros-and-cons-of-running-on-different-surfaces

The Science of Rest Days: How Often to Take Them and Why They Matter. (2024). https://www.trainingrealm.com/science-rest-days-how-often-take-them-and-why-they-matter

The sleep science all runners need to know for better sleep. (n.d.). https://www.womensrunning.co.uk/health/the-sleep-science-all-runners-need-to-know/

The Two Questions: Needs and Motivations Affecting Running ... (2017). https://www.irunfar.com/the-two-questions-needs-and-motivations-affecting-running-health-and-success

The worst training advice for runners (and what to do instead) - Run ... (n.d.). https://www.runwithcaroline.com/training-advice/

Thomas L. McMahon. (2017). Why Did It Take So Long for Indian Residential School Claims to Come to Court? The Excruciatingly Gradual Civilization of Canada’s Legal System. https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2844543

Tim Hutchful. (2014). Is a saddle seat the antidote to poor posture. In Dental Nursing. https://www.semanticscholar.org/paper/05a47c9b40485ac682888ea751cf9da3abbd958a

Timing of intake to improve performance in athletes and physically ... (n.d.). https://www.canr.msu.edu/news/timing-of-intake-to-improve-performance-in-athletes-and-physically-active-individuals

TJ Gabbett. (2020). How much? How fast? How soon? Three simple concepts for progressing training loads to minimize injury risk and enhance performance. In Journal of orthopaedic & sports physical therapy. https://www.jospt.org/doi/abs/10.2519/jospt.2020.9256

Top Strategies to Avoid Chafing During Rucking: Lubricants and ... (n.d.). https://ruckingworld.com/rucking/top-strategies-to-avoid-chafing-during-rucking-lubricants-and-hydration-explained/

Tracy Mooney. (2012). Chronic fatigue syndrome. In Nursing standard (Royal College of Nursing (Great Britain) : 1987). https://www.semanticscholar.org/paper/c2a0f00522f4f41853862477af4b2fc730adb981

Training Need Assessment: Steer Clear of These 10 Blunders. (n.d.). https://www.playablo.com/CorporateLearning/Blog/training-need-assessment/

Training Needs Analysis: A Complete Guide to Identifying and Bridging ... (2025). https://stratbeans.com/training-needs-analysis/

Training Stress vs. Life Stress | TrainingPeaks. (n.d.). https://www.trainingpeaks.com/blog/training-stress-vs-life-stress/

U Dayal, M Hsu, & R Ladin. (1990). Organizing long-


this.lstMovieMonitorFolders.Anchor = ((global::System.Windows.Forms.AnchorStyles)(((global::System.Windows.Forms.AnchorStyles.Bottom) | (global::System.Windows.Forms.AnchorStyles.Left)) | (global::System.Windows.Forms.AnchorStyles.Right)));
            this.lstMovieMonitorFolders.FormattingEnabled = (true);
            this.lstMovieMonitorFolders.IntegralHeight = (false);
            this.lstMovieMonitorFolders.ItemHeight = (15);
            this.lstMovieMonitorFolders.Location = (new global::System.Drawing.Point(7, 373));
            this.lstMovieMonitorFolders.Margin = (new global::System.Windows.Forms.Padding(4, 3, 4, 3));
            this.lstMovieMonitorFolders.Name = ("lstMovieMonitorFolders");
            this.lstMovieMonitorFolders.ScrollAlwaysVisible = (true);
            this.lstMovieMonitorFolders.SelectionMode = (global::System.Windows.Forms.SelectionMode.MultiExtended);
            this.lstMovieMonitorFolders.Size = (new global::System.Drawing.Size(464, 111));
            this.lstMovieMonitorFolders.TabIndex = (49);
            this.toolTip1.SetToolTip(this.lstMovieMonitorFolders, resources.GetString("lstMovieMonitorFolders.ToolTip"));
            this.lstMovieMonitorFolders.SelectedIndexChanged += (this.lstMovieMonitorFolders_SelectedIndexChanged);
            this.lstMovieMonitorFolders.DragDrop += (this.lstMovieMonitorFolders_DragDrop);
            this.lstMovieMonitorFolders.DragOver += (this.FileIcon_DragOver);
            this.lstMovieMonitorFolders.KeyDown += (this.lstMovieMonitorFolders_KeyDown);
            //
            // chkIncludeMoviesQuickRecent
            //
            this.chkIncludeMoviesQuickRecent.AutoSize = (true);
            this.chkIncludeMoviesQuickRecent.Location = (new global::System.Drawing.Point(264, 22));
            this.chkIncludeMoviesQuickRecent.Margin = (new global::System.Windows.Forms.Padding(4, 3, 4, 3));
            this.chkIncludeMoviesQuickRecent.Name = ("chkIncludeMoviesQuickRecent");
            this.chkIncludeMoviesQuickRecent.Size = (new global::System.Drawing.Size(194, 19));
            this.chkIncludeMoviesQuickRecent.TabIndex = (50);
            this.chkIncludeMoviesQuickRecent.Text = ("&Include Movies in Quick/Recent");
            this.toolTip1.SetToolTip(this.chkIncludeMoviesQuickRecent, "If checked the system will automatically scan and complete actions on startup");
            this.chkIncludeMoviesQuickRecent.UseVisualStyleBackColor = (true);
            //
            // tbCleanUpDownloadDirMoviesLength
            //
            this.tbCleanUpDownloadDirMoviesLength.Location = (new global::System.Drawing.Point(252, 75));
            this.tbCleanUpDownloadDirMoviesLength.Margin = (new global::System.Windows.Forms.Padding(4, 3, 4, 3));
            this.tbCleanUpDownloadDirMoviesLength.Name = ("tbCleanUpDownloadDirMoviesLength");
            this.tbCleanUpDownloadDirMoviesLength.Size = (new global::System.Drawing.Size(63, 23));
            this.tbCleanUpDownloadDirMoviesLength.TabIndex = (14);
            this.toolTip1.SetToolTip(this.tbCleanUpDownloadDirMoviesLength, "Number of letters that the name of the movie must be. To prevent 'Up' ");
            //
            // label98
            //
            this.label98.AutoSize = (true);
            this.label98.Location = (new global::System.Drawing.Point(414, 148));
            this.label98.Margin = (new global::System.Windows.Forms.Padding(4, 0, 4, 0));
            this.label98.Name = ("label98");
            this.label98.Size = (new global::System.Drawing.Size(50, 15));


-------------------------------------------------------------
-- Clear chat (using time perms)
---------------------------------------------------------------------------
RegisterCommand("clearchat", function(source, args, raw)
    local src = source
    local player = GetPlayerData(src)
    if player ~= false then
        if DoesRankHavePerms(player.rank, "clearchat") then
            TriggerClientEvent('chat:clear', -1)
            TriggerClientEvent("DRP_Core:Error", -1, locale:GetValue('AdminSystem'), locale:GetValue('ChatCleared'), 2500, false, "centerTop")
        else
            TriggerClientEvent("chatMessage", src, locale:GetValue('PermissionClearChat'))
        end
    end
end, false)
---------------------------------------------------------------------------
-- Show coordinates in chat
---------------------------------------------------------------------------
RegisterCommand("coords", function(source, args, raw)
    local src = source
    local player = GetPlayerData(src)
    if player ~= false then
        if DoesRankHavePerms(player.rank, "coords") then
            TriggerClientEvent("DRP_Core:SendCoords", src)
        else
            TriggerClientEvent("chatMessage", src, locale:GetValue('PermissionShowCoords'))
        end
    end
end, false)
---------------------------------------------------------------------------
-- Show coordinates on UI
---------------------------------------------------------------------------
RegisterCommand("showcoords", function(source, args, raw)
    local src = source
    local player = GetPlayerData(src)
    if player ~= false then
        if DoesRankHavePerms(player.rank, "coords") then
            TriggerClientEvent("DRP_Core:ShowCoords", src)
        else
            TriggerClientEvent("chatMessage", src, locale:GetValue('PermissionShowCoords'))
        end
    end
end, false)


uot;</var>, int <var>"nt"</var>,
                    int <var>"blockx"</var>, int <var>"blocky"</var>, <var>"bool chroma"</var>,
                    bool <var>"debug"</var>, bool <var>"norm"</var>, bool <var>"denoise"</var>,
                    bool <var>"ssd"</var>, bool <var>"rpos"</var>, int <var>"opt"</var>)

Pklad

conditionalfilter(last,source1,source2,"CFrameDiff",">","2.0")

Parametry

<var>     mode</var> -

Nastavuje zda se vrt nejvy nebo nejni hodnota metriky snmku.

0 - nejni

1 - nejvy

Vchoz:  1  (int)

<var>     prevf</var> -

Nastavuje zda je potn rozdl od pedchozho snmku nebo rozdl od nsledujcho snmku.

true -  pedchoz

false - nsledujc

Vchoz:  true  (bool)

<var>     nt</var> -

Prahov hodnota umu pouit pi vpotu metrik.  Je to stejn jako
parametr nt v TDecimate.

vchoz:  0  (int)

<var>     blockx/blocky</var> -

Definuje velikost blok pouitch pi vpotech metrik. blockx = velikost v ose x,
         blocky = velikost v ose y.  Mus bt mocninami sla 2, kter jsou vt nebo rovny
         4 a men nebo rovny 2048.  Jsou stejn jako nastaven blockx/blocky
         v TDecimate.

Vchoz:

blockx = 32  (int)

blocky = 32  (int)

<var>chroma</var> -

Nastavuje zda barevnost je a nebo nen uvaovna pi vpotech metrik.

Vchoz:  false  (bool)

<var>display</var> -

Ovld co, pokud vbec nco, bude vykresleno do snmk.  Mon nastaven:

            0 - nic

            1 - ladc (debug) info + tvereek je vykreslen kolem bloku, ze kterho pochz metrika
                   (nejni blok metriky pro mode = 0 a
                   nejvy blok metriky pro mode = 1)

            2 - ladc (debug) info + pokud mode = 0 tak vechny bloky s metrikou, kter
                   je <= parametru "thresh" budou vybarveny ble,
                   jinak pokud mode = 1 , tak vechny bloky s metrikou, kter je >=
                   "thresh" budou vybarveny ble.  (Znaka ernho jednotlivho pixelu
                   je pidna do stedu kadho vybarvenho bloku)

            3 - snmek je nastaven na 0 krom bloku, z nho metrika pochz
                (nejni blok metriky pro mode = 0 a
                   nejvy blok metriky pro mode = 1), a kter je nastaven na 255

            4 - stejn jako 2


, v1, flat_scratch_hi
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xcf,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, vcc_lo
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xd5,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, vcc_hi
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xd7,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, tba_lo
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xd9,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, tba_hi
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xdb,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, tma_lo
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xdd,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, tma_hi
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xdf,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, ttmp11
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xf7,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, m0
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xf9,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, exec_lo
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xfd,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, exec_hi
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xff,0x00,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, 0
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0x01,0x01,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, -1
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0x83,0x01,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, 0.5
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xe1,0x01,0x00]

v_cmpx_t_i32_e64 s[10:11], v1, -4.0
// CHECK: [0x0a,0x00,0xd7,0xd0,0x01,0xef,0x01,0x00]

v_cmpx_f_u32 vcc, v1, v2
// CHECK: [0x01,0x05,0xb0,0x7d]

v_cmpx_f_


WX86_EXCEPTION_CONTINUE = 0x40000020
	// An exception status code that is used by the Win32 x86 emulation subsystem.
	STATUS_WX86_EXCEPTION_LASTCHANCE = 0x40000021
	// An exception status code that is used by the Win32 x86 emulation subsystem.
	STATUS_WX86_EXCEPTION_CHAIN = 0x40000022
	// {Machine Type Mismatch} The image file %hs is valid but is for a machine type other than the current machine.
	STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE = 0x40000023
	// A yield execution was performed and no thread was available to run.
	STATUS_NO_YIELD_PERFORMED = 0x40000024
	// The resume flag to a timer API was ignored.
	STATUS_TIMER_RESUME_IGNORED = 0x40000025
	// The arbiter has deferred arbitration of these resources to its parent.
	STATUS_ARBITRATION_UNHANDLED = 0x40000026
	// The device has detected a CardBus card in its slot.
	STATUS_CARDBUS_NOT_SUPPORTED = 0x40000027
	// An exception status code that is used by the Win32 x86 emulation subsystem.
	STATUS_WX86_CREATEWX86TIB = 0x40000028
	// The CPUs in this multiprocessor system are not all the same revision level. To use all processors, the operating system restricts itself to the features of the least capable processor in the system. If problems occur with this system, contact the CPU manufacturer to see if this mix of processors is supported.
	STATUS_MP_PROCESSOR_MISMATCH = 0x40000029
	// The system was put into hibernation.
	STATUS_HIBERNATED = 0x4000002A
	// The system was resumed from hibernation.
	STATUS_RESUME_HIBERNATION = 0x4000002B
	// Windows has detected that the system firmware (BIOS) was updated [previous firmware date = %2, current firmware date %3].
	STATUS_FIRMWARE_UPDATED = 0x4000002C
	// A device driver is leaking locked I/O pages and is causing system degradation. The system has automatically enabled the tracking code to try and catch the culprit.
	STATUS_DRIVERS_LEAKING_LOCKED_PAGES = 0x4000002D
	// The ALPC message being canceled has already been retrieved from the queue on the other side.
	STATUS_MESSAGE_RETRIEVED = 0x4000002E
	// The system power state is transitioning from %2 to %3.
	STATUS_SYSTEM_POWERSTATE_TRANSITION = 0x4000002F
	// The receive operation was successful. Check the ALPC completion list for the received message.
	STATUS_ALPC_CHECK_COMPLETION_LIST = 0x40000030
	// The system power state is transitioning from %2 to %3 but could enter %4.
	STATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION = 0x40000031
	// Access to %1 is monitored by policy rule %2.
	STATUS_ACCESS_AUDIT_BY_POLICY = 0x40000032
	// A valid hibernation file has been invalidated and should be abandoned.
	STATUS_ABANDON_HIBERFILE = 0x40000033
	// Business rule scripts are disabled for the calling application.
	STATUS_BIZRULES_NOT_ENABLED = 0x40000034
	// The system has awoken.
	STATUS_WAKE_SYSTEM = 0x40000294
	// The directory service is shutting down.
	STATUS_DS_SHUTTING_DOWN = 0x40000370
	// Debugger will reply later.
	DBG_REPLY_LATER = 0x40010001
	// Debugger cannot provide a handle.
	DBG_UNABLE_TO_PROVIDE_HANDLE = 0x40010002
	// Debugger terminated the thread.
	DBG_TERMINATE_THREAD = 0x40010003
	// Debugger terminated the process.
	DBG_TERMINATE_PROCESS = 0x40010004
	// Debugger obtained control of C.
	DBG_CONTROL_C = 0x40010005
	// Debugger printed an exception on control C.
	DBG_PRINTEXCEPTION_C


724761953rem;
  font-family: var(--menu-font);
  font-style: normal;
  font-variation-settings: "wght" var(--font-weight-normal);
  margin-bottom: var(--baseline);
}
.content__nav-image {
  flex: 1 0 4rem;
  margin: 0;
  height: 4rem;
}
@media all and (min-width: 37.5em) and (max-width: 56.1875em) {
  .content__nav-image {
    flex-basis: 6rem;
    height: 6rem;
  }
}
@media all and (min-width: 56.25em) {
  .content__nav-image {
    flex-basis: 8rem;
    height: 8rem;
  }
}
.content__nav-image > img {
  border-radius: calc(var(--border-radius) * 4);
  display: block;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
  width: 100%;
}
.content__related {
  background: var(--lighter);
  margin-top: calc(var(--baseline) * 16 + 1vw);
  padding: calc(var(--baseline) * 12 + 3vw) 0;
}
.related__title {
  margin-top: 0;
}

.content__comments {
  margin-top: calc(var(--baseline) * 9);
  overflow: hidden;
}

.post__image:not(.post__image--wide):not(.post__image--full) {
  display: inline-block;
  margin-bottom: calc(var(--baseline) * 2 + 0.25vw);
}
.post__image a,
.post__image img {
  border-radius: calc(var(--border-radius) * 4);
  display: inline-block;
}
.post__image > figcaption {
  background-color: var(--page-bg);
}
.post__image--left {
  float: left;
  margin-right: 2rem;
  max-width: 50%;
}
.post__image--right {
  float: right;
  margin-left: 2rem;
  max-width: 50%;
}
.post__image--center {
  display: block;
  margin-left: auto;
  margin-right: auto;
  text-align: center;
}
.post__image--wide {
  display: block;
}
@media all and (min-width: 56.25em) {
  .post__image--wide {
    margin-left: calc(-50vw + 50%);
    margin-right: calc(-50vw + 50%);
    padding: 0 var(--page-margin);
    text-align: center;
  }
  .post__image--wide a,
  .post__image--wide img {
    display: block;
    height: auto;
    margin: auto;
    max-width: var(--page-width);
    width: 100%;
  }
}
.post__image--full {
  background-color: var(--lighter);
  display: block;
  margin-left: calc(-50vw + 50%);
  margin-right: calc(-50vw + 50%);
  text-align: center;
}
.post__image--full a,
.post__image--full img {
  border-radius: 0;
  display: block;
  height: auto;
  width: 100%;
}
.post__video, .post__iframe {
  display: block;
  margin-top: calc(var(--baseline) * 6 + 0.5vw);
  margin-bottom: calc(var(--baseline) * 6 + 0.5vw);
  overflow: hidden;
  padding: 0;
  position: relative;
  width: 100%;
}
.post__video::before, .post__iframe::before {
  display: block;
  content:


"
    (onRowActivate)="editSelected([$event])"
    [cellTextGenerator]="cellTextGenerator">
  <eg-grid-toolbar-button [disabled]="!canCreate"
    label="New {{idlClassDef.label}}" i18n-label (onClick)="createNew()">
  </eg-grid-toolbar-button>
  <eg-grid-toolbar-button [disabled]="!canRollover"
    label="Fiscal Propagation and Rollover" i18n-label (onClick)="doRollover()">
  </eg-grid-toolbar-button>
  <eg-grid-toolbar-action label="View Selected" i18n-label
    (onClick)="openFundDetailsDialog($event)">
  </eg-grid-toolbar-action>
  <eg-grid-toolbar-action label="Edit Selected" i18n-label (onClick)="editSelected($event)">
  </eg-grid-toolbar-action>
  <eg-grid-toolbar-action label="Delete Selected" i18n-label (onClick)="deleteSelected($event)">
  </eg-grid-toolbar-action>

  <ng-template #nameTmpl let-row="row">

      {{row.name()}}

  </ng-template>
  <eg-grid-column path="name" [cellTemplate]="nameTmpl"></eg-grid-column>
  <eg-grid-column path="code"></eg-grid-column>
  <eg-grid-column path="year" initialFilterOperator="=" [initialFilterValue]="getDefaultYear()"></eg-grid-column>
  <eg-grid-column path="org"></eg-grid-column>
  <eg-grid-column path="currency_type"></eg-grid-column>
  <eg-grid-column path="active"></eg-grid-column>
  <eg-grid-column path="balance_stop_percent"></eg-grid-column>
  <eg-grid-column path="balance_warning_percent"></eg-grid-column>
  <eg-grid-column path="propagate"></eg-grid-column>
  <eg-grid-column path="rollover"></eg-grid-column>
  <eg-grid-column path="combined_balance.amount"
    [sortable]="false" [filterable]="false"
    label="Combined Balance" i18n-label></eg-grid-column>
  <eg-grid-column path="spent_balance.amount"
    [sortable]="false" [filterable]="false" [hidden]="true"
    label="Spent Balance" i18n-label></eg-grid-column>
  <eg-grid-column path="spent_total.amount"
    [sortable]="false" [filterable]="false" [hidden]="true"
    label="Total Spent" i18n-label></eg-grid-column>
  <eg-grid-column path="encumbrance_total.amount"
    [sortable]="false" [filterable]="false" [hidden]="true"
    label="Total Encumbered" i18n-label></eg-grid-column>
  <eg-grid-column path="debit_total.amount"
    [sortable]="false" [filterable]="false" [hidden]="true"
    label="Total Debits" i18n-label></eg-grid-column>
  <eg-grid-column path="allocation_total.amount"
    [sortable]="false" [filterable]="false" [hidden]="true"
    label="Total Allocated" i18n-label></eg-grid-column>
  <eg-grid-column path="id" [hidden]="true"></eg-grid-column>

</eg-grid>

  Legacy funds interface

<eg-fm-record-editor #editDialog idlClass="{{idlClass}}"
    [fieldOptions]="fieldOptions"
    [fieldOrder]="fieldOrder"
    [defaultNewRecord]="defaultNewRecor


.2.1.cmml" xref="S4.E4.m1.1.1.4.2">superscript</csymbol><ci id="S4.E4.m1.1.1.4.2.2.2.cmml" xref="S4.E4.m1.1.1.4.2.2.2">𝜒</ci><cn type="integer" id="S4.E4.m1.1.1.4.2.2.3.cmml" xref="S4.E4.m1.1.1.4.2.2.3">2</cn></apply><apply id="S4.E4.m1.1.1.4.2.3.cmml" xref="S4.E4.m1.1.1.4.2.3"><times id="S4.E4.m1.1.1.4.2.3.1.cmml" xref="S4.E4.m1.1.1.4.2.3.1"></times><ci id="S4.E4.m1.1.1.4.2.3.2.cmml" xref="S4.E4.m1.1.1.4.2.3.2">𝑒</ci><ci id="S4.E4.m1.1.1.4.2.3.3.cmml" xref="S4.E4.m1.1.1.4.2.3.3">𝑥</ci><ci id="S4.E4.m1.1.1.4.2.3.4.cmml" xref="S4.E4.m1.1.1.4.2.3.4">𝑡</ci><ci id="S4.E4.m1.1.1.4.2.3.5.cmml" xref="S4.E4.m1.1.1.4.2.3.5">𝑒</ci><ci id="S4.E4.m1.1.1.4.2.3.6.cmml" xref="S4.E4.m1.1.1.4.2.3.6">𝑛</ci><ci id="S4.E4.m1.1.1.4.2.3.7.cmml" xref="S4.E4.m1.1.1.4.2.3.7">𝑑</ci><ci id="S4.E4.m1.1.1.4.2.3.8.cmml" xref="S4.E4.m1.1.1.4.2.3.8">𝑒</ci><ci id="S4.E4.m1.1.1.4.2.3.9.cmml" xref="S4.E4.m1.1.1.4.2.3.9">𝑑</ci></apply></apply><apply id="S4.E4.m1.1.1.4.3.cmml" xref="S4.E4.m1.1.1.4.3"><csymbol cd="ambiguous" id="S4.E4.m1.1.1.4.3.1.cmml" xref="S4.E4.m1.1.1.4.3">subscript</csymbol><apply id="S4.E4.m1.1.1.4.3.2.cmml" xref="S4.E4.m1.1.1.4.3"><csymbol cd="ambiguous" id="S4.E4.m1.1.1.4.3.2.1.cmml" xref="S4.E4.m1.1.1.4.3">superscript</csymbol><ci id="S4.E4.m1.1.1.4.3.2.2.cmml" xref="S4.E4.m1.1.1.4.3.2.2">𝜒</ci><cn type="integer" id="S4.E4.m1.1.1.4.3.2.3.cmml" xref="S4.E4.m1.1.1.4.3.2.3">2</cn></


e.column,
                        h : 1 /imgFile.row
                    })
                })
            })
        } catch (err){
            console.log(err)
        }
    }

    addWidget(nextWidgets:Array<Array<string>>,nodes:Array<Array<Node>>) {
        nodes.forEach((list,i)=>{
            list.forEach((node,j)=>{
                const widgetType = nextWidgets[i][j];
                if(widgetType) {
                    const [type,status] = widgetType.split("#");
                    const w = new Widget(type,status,node.getId(),node.getX(),node.getY(),0,true);
                    this.widgets.set(w.getID(),w);
                    node.addWidget(w.getID(),w.getType(),w.getCanReach());
                }
            })
        })
        return nodes;
    }

    setWidgets(w:Map<number,Widget>){
        this.widgets = w;
    }

    getWidgetByID(id: number){
        return this.widgets.get(id);
    }

    getCacheImage(src:string) {
        return this.imagesMap.get(src);
    }

    getWidgetInfor(widgetType:string) {
        return this.widgetTypeSizeInfor.get(widgetType);
    }

    getWidgetMapSortByImage() {
        const m : Map<string,Array<Widget>> = new Map();
        this.widgets.forEach((v)=>{
            const imageSrc = this.widgetToImageMap.get(v.getWidgetType())
            if(imageSrc){
                if(m.has(imageSrc)) {
                    m.get(imageSrc)?.push(v);
                } else{
                    m.set(imageSrc,[v]);
                }
            }
        });
        return m;
    }

    getWidgets() {
        return this.widgets;
    }
    render() {

    }

    getImage(src : string) {
        return new Promise((resolve,reject)=>{
            const image = new Image();
            image.src = src;
            image.onload = ()=>{ resolve(image) };
            image.onerror = (err)=>{ reject(err) };
        })
    }
}

export default Manager// Rectangle Utility class: Coordinate system upper left == (0,0)
// Units are whatever you define them: inches, pixels, parsecs...
// Just be consistent or you'll crash into Mars.
//
// _x - x coordinate left side.
// _y - y coordinate top side.
// _w - width
// _h - height

export class Rect {
  private _x:number;
  private _y:number;
  private _w:number;
  private _h:number;

  constructor(x:number=0, y:number=0, w:number=0, h:number=0) {
    this._x = x;
    this._y = y;
    this._w = w;
    this._h = h;
  }

    get x():number {
      return this._x;
    }
    set x(v:number) {
      this._x = v;
    }

    get y():number {
      return this._y;
    }
    set y(v:number) {
      this._y = v;
    }

    get w():number {
      return this._w;
    }
    set w(v:number) {
      this._w = v;
    }

    get h():number {
      return this._h;
    }
    set h(v:number) {
      this._h = v;
    }

    floor():Rect {
      this._x = Math.floor(this._x);
      this._y = Math.floor(this._y);
      this._w = Math.floor(this._w);
      this._h = Math.floor(this._h);
      return this;
    }

    ceil():Rect {
      this._x = Math.ceil(this._x);
      this._y = Math.ceil(


tor: 'app-star-ratings',
  templateUrl: './star-ratings.component.html',
  styleUrls: ['./star-ratings.component.scss']
})
export class StarRatingsComponent {
  @Input() rating: number = 5;
  private readonly highestRating: number = 5;

  constructor() { }

  get fullStars(): number[] {
    const totalFullStars = Math.floor(this.rating);
    return Array(totalFullStars).fill(0);
  }

  get halfStars(): boolean {
    const hasHalfStar = (this.rating - Math.floor(this.rating) > 0.5) && this.rating !== this.highestRating;
    return hasHalfStar;
  }

  get emptyStars(): number[] {
    const totalEmptyStars = Math.floor(this.highestRating - this.rating);
    return Array(totalEmptyStars).fill(0);
  }

}
///<reference path="types/babylon.d.ts" />

class Game {
    private readonly _canvas: HTMLCanvasElement;
    private readonly _engine: BABYLON.Engine;
    private _scene: BABYLON.Scene;
    private _light: BABYLON.Light;

    private readonly _orbitRadius: number;

    constructor(canvasElement: string) {
        this._canvas = document.getElementById(canvasElement) as HTMLCanvasElement;
        this._engine = new BABYLON.Engine(this._canvas, true);
        this._orbitRadius = 598;
    }

    createScene(): void {
        this._scene = new BABYLON.Scene(this._engine);
        this._scene.clearColor = new BABYLON.Color4(150, 150, 150);

        let earth = BABYLON.MeshBuilder.CreateSphere('earth',
            {diameter: 1}, this._scene);
        let points = this.createAnimation(earth);
        earth.position = points[0];

        let earthLabel = this.makePlanetLabel("EARTH", "black", 100);
        earthLabel.parent = earth;

        const camera = new BABYLON.ArcRotateCamera('camera1', Math.PI, 0, 0,
            new BABYLON.Vector3(this._orbitRadius, 0, -this._orbitRadius), this._scene);
        camera.setTarget(earth);
        camera.attachControl(this._canvas, false);

        this._light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0, 0, 500), this._scene);
        this._light.intensity = 0.5;

        let sun = BABYLON.MeshBuilder.CreateSphere("sun",
            {diameter: 109}, this._scene);
        sun.position = BABYLON.Vector3.Zero();

        const track = BABYLON.MeshBuilder.CreateLines('track', {points: points}, this._scene);
        track.color = new BABYLON.Color3(0, 0, 0);
        track.alpha = 0.1;

        this.showAxis(500);

        setTimeout(() => {
            this._scene.beginAnimation(earth, 0, points.length, true);
        });
    }

    createAnimation(mesh: BABYLON.Mesh) {
        const animation = new BABYLON.Animation("myAnimation", "position", 10, BABYLON.Animation.ANIMATIONTYPE_VECTOR3,
            BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);

        let [keys, points] = this.generateKeys();
        animation.setKeys(keys);

        mesh.animations = [animation];

        return points;
    }

    generateKeys() {
        const diameter = this._orbitRadius;
        const keys = [];
        const points = [];
        for (let theta = 0; theta <= 360; theta += 0.1) {
            let rad = theta * (Math.PI / 180);
            let value = new BABYLON.Vector3((diameter / 2) * Math.cos(rad),


#678  Auto +216] [flags 0x4007 0x0 ]
```
`"VFP Substitution"`: The instruction at `0x7fef12b0bdd0` populates the stack pointer `rsp`. This is the instruction
that looks more or less what is going into the code cache.

```
0x7fef13a74929 00000229 [0x7fef12b0bdd0] 48 89 8c 24 d8 00 00 00            mov	qword ptr [rsp+0xd8], rcx		# S8MemReg, SymRef  <temp slot 8>[#678  Auto +216] [flags 0x4007 0x0 ]
```
`"Post Binary Instructions"`: The final binary encoding at `0x7fef13a74929`.

### 7.4 Precondition and Postondition

```
; Live regs: GPR=3 FPR=0 VRF=0 {&GPR_1441, &GPR_1440, GPR_1424}
------------------------------
 n430n    (  0)  treetop ()                                                                           [0x7fef25791620] bci=[6,43,1541] rc=0 vc=4181 vn=- li=34 udi=- nc=1 flg=0x8
 n349n    ( 12)    acall  java/util/ArrayList.elementAt([Ljava/lang/Object;I)Ljava/lang/Object;[#430  static Method] [flags 0x500 0x0 ] (X>=0 virtualCallNodeForAGuardedInlinedCall sharedMemory )  [0x7fef2578fcd0] bci=[6,43,1541] rc=12 vc=4181 vn=- li=34 udi=- nc=2 flg=0x908
 n5121n   (  8)      ==>aRegLoad (in &GPR_1441) (X!=0 SeenRealReference sharedMemory )
 n5119n   (  8)      ==>iRegLoad (in GPR_1424) (cannotOverflow SeenRealReference )
------------------------------
------------------------------
 n430n    (  0)  treetop ()                                                                           [0x7fef25791620] bci=[6,43,1541] rc=0 vc=4181 vn=- li=34 udi=- nc=1 flg=0x8
 n349n    ( 11)    acall  java/util/ArrayList.elementAt([Ljava/lang/Object;I)Ljava/lang/Object;[#430  static Method] [flags 0x500 0x0 ] (in &GPR_1469) (X>=0 virtualCallNodeForAGuardedInlinedCall sharedMemory )  [0x7fef2578fcd0] bci=[6,43,1541] rc=11 vc=4181 vn=- li=34 udi=64144 nc=2 flg=0x908
 n5121n   (  7)      ==>aRegLoad (in &GPR_1441) (X!=0 SeenRealReference sharedMemory )
 n5119n   (  7)      ==>iRegLoad (in GPR_1424) (cannotOverflow SeenRealReference )
------------------------------

 [0x7fef12b4f170]	mov	&GPR_1456, &GPR_1441		# MOV8RegReg
 [0x7fef12b4f280]	mov	GPR_1457, GPR_1424		# MOV4RegReg
 [0x7fef12b4fb10]	Label L0768:			# label	# (Start of internal control flow)
	 PRE: [&GPR_1456 : eax] [GPR_1457 : esi]
 [0x7fef12b4f470]	nop			# Align patchable code @32 [0x0:5]
 [0x7fef12b4f3d0]	call	java/util/ArrayList.elementAt([Ljava/lang/Object;I)Ljava/lang/Object;# CALLImm4 (00007FEF13A6CF89)# CALLImm4
 [0x7fef12b4fe20]	assocreg                        # assocreg
	POST: [GPR_1424 : r8d] [&GPR_1440 : r12d] [&GPR_1441 : r13d]
 [0x7fef12b4fbb0]	Label L0769:			# label	# (End of internal control flow)
	 PRE: [&GPR_1456 : eax] [GPR_1457 :


                <img alt="Tara E-Sarn Classic Restaurant Naklua, Zufahrt über Soi Photisarn Soi 8"
                     title="Tara E-Sarn Classic Restaurant Naklua, Zufahrt über Soi Photisarn Soi 8"
                     src="//files.der-farang.com/files/000/000/00/03/bnr/ca/46/03


    if (value != other.value ||
        type != other.type ||
        positionInMessage != other.positionInMessage ||
        children.length != other.children.length) {
      return false;
    }
    for (var i = 0; i < children.length; i++) {
      if (children[i] != other.children[i]) {
        return false;
      }
    }
    return true;
  }

  bool get isFull {
    return children.length >= expectedSymbolCount;
  }
}

RegExp unescapedString = RegExp(r'[^{}]+');
RegExp brace = RegExp(r'{|}');

RegExp whitespace = RegExp(r'\s+');
RegExp pluralKeyword = RegExp(r'plural');
RegExp selectKeyword = RegExp(r'select');
RegExp otherKeyword = RegExp(r'other');
RegExp numeric = RegExp(r'[0-9]+');
RegExp alphanumeric = RegExp(r'[a-zA-Z0-9]+');
RegExp comma = RegExp(r',');
RegExp equalSign = RegExp(r'=');

// List of token matchers ordered by precedence
Map<ST, RegExp> matchers = <ST, RegExp>{
  ST.empty: whitespace,
  ST.plural: pluralKeyword,
  ST.select: selectKeyword,
  ST.other: otherKeyword,
  ST.number: numeric,
  ST.comma: comma,
  ST.equalSign: equalSign,
  ST.identifier: alphanumeric,
};

class Parser {
  Parser(this.messageId, this.filename, this.messageString);

  final String messageId;
  final String messageString;
  final String filename;

  static String indentForError(int position) {
    return '${List<String>.filled(position, ' ').join()}^';
  }

  // Lexes the message into a list of typed tokens. General idea is that
  // every instance of "{" and "}" toggles the isString boolean and every
  // instance of "'" toggles the isEscaped boolean (and treats a double
  // single quote "''" as a single quote "'"). When !isString and !isEscaped
  // delimit tokens by whitespace and special characters.
  List<Node> lexIntoTokens() {
    final tokens = <Node>[];
    var isString = true;
    // Index specifying where to match from
    var startIndex = 0;

    // At every iteration, we should be able to match a new token until we
    // reach the end of the string. If for some reason we don't match a
    // token in any iteration of the loop, throw an error.
    while (startIndex < messageString.length) {
      Match? match;
      if (isString) {
        // TODO(thkim1011): Uncomment this when we add escaping as an option.
        // See https://github.com/flutter/flutter/issues/113455.
        // match = escapedString.matchAsPrefix(message, startIndex);
        // if (match != null) {
        //   final String string = match.group(0)!;
        //   tokens.add(Node.string(startIndex, string == "''" ? "'" : string.substring(1, string.length - 1)));
        //   startIndex = match.end;
        //   continue;
        // }
        match = unescapedString.matchAsPrefix(messageString, startIndex);
        if (match != null) {
          tokens.add(Node.string(startIndex, match.group(0)!));
          startIndex = match.end;
          continue;
        }
        match = brace.matchAsPrefix(messageString, startIndex);
        if (match != null) {
          tokens.add(Node.brace(startIndex, match.group(0)!));
          isString = false;
          startIndex = match.end;
          continue;
        }


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WebVella.BlazorTrace.Models;
public enum WvTraceMuteType
{
	[Description("Module")]
	Module = 0,
	[Description("Component")]
	Component = 1,
	[Description("Component Instance")]
	ComponentInstance = 2,
	[Description("Method")]
	Method = 10,
	[Description("Method in Module")]
	MethodInModule = 11,
	[Description("Method in Component")]
	MethodInComponent = 12,
	[Description("Method in Component Instance")]
	MethodInComponentInstance = 13,
	[Description("Signal")]
	Signal = 20,
	[Description("Signal in Module")]
	SignalInModule = 21,
	[Description("Signal in Component")]
	SignalInComponent = 22,
	[Description("Signal in Component Instance")]
	SignalInComponentInstance = 23,
	[Description("Field")]
	Field = 30,
	[Description("Field in Module")]
	FieldInModule = 31,
	[Description("Field in Component")]
	FieldInComponent = 32,
	[Description("Field in Component Instance")]
	FieldInComponentInstance = 33,
	[Description("Field in Assembly")]
	FieldInAssembly = 34,
	[Des


w int[] { 0x87, 0xce, 0xeb, 0xff });
		NAMES.put("slateblue", new int[] { 0x6a, 0x5a, 0xcd, 0xff });
		NAMES.put("slategray", new int[] { 0x70, 0x80, 0x90, 0xff });
		NAMES.put("snow", new int[] { 0xff, 0xfa, 0xfa, 0xff });
		NAMES.put("springgreen", new int[] { 0x00, 0xff, 0x7f, 0xff });
		NAMES.put("steelblue", new int[] { 0x46, 0x82, 0xb4, 0xff });
		NAMES.put("tan", new int[] { 0xd2, 0xb4, 0x8c, 0xff });
		NAMES.put("teal", new int[] { 0x00, 0x80, 0x80, 0xff });
		NAMES.put("thistle", new int[] { 0xd8, 0xbf, 0xd8, 0xff });
		NAMES.put("tomato", new int[] { 0xff, 0x63, 0x47, 0xff });
		NAMES.put("transparent", new int[] { 0xff, 0xff, 0xff, 0x00 });
		NAMES.put("turquoise", new int[] { 0x40, 0xe0, 0xd0, 0xff });
		NAMES.put("violet", new int[] { 0xee, 0x82, 0xee, 0xff });
		NAMES.put("wheat", new int[] { 0xf5, 0xde, 0xb3, 0xff });
		NAMES.put("white", new int[] { 0xff, 0xff, 0xff, 0xff });
		NAMES.put("whitesmoke", new int[] { 0xf5, 0xf5, 0xf5, 0xff });
		NAMES.put("yellow", new int[] { 0xff, 0xff, 0x00, 0xff });
		NAMES.put("yellowgreen", new int[] { 0x9a, 0xcd, 0x32, 0xff });
	}

	/**
	 * A web color string without the leading # will be 3 or 6 characters long
	 * and all those characters will be hex digits. NOTE: colStr must be all
	 * lower case or the current hex letter test will fail.
	 *
	 * @param colStr
	 *            A non-null, lower case string that might describe an RGB color
	 *            in hex.
	 * @return Is this a web color hex string without the leading #?
	 * @since 5.0.6
	 */
	private static boolean missingHashColorFormat(String colStr) {
		int len = colStr.length();
		if (len == 3 || len == 6) {
			// and it just contains hex chars 0-9, a-f, A-F
			String match = "[0-9a-f]{" + len + "}";
			return colStr.matches(match);
		}
		return false;
	}

	/**
	 * Gives you a BaseColor based on a name.
	 *
	 * @param name
	 *            a name such as black, violet, cornflowerblue or #RGB or
	 *            #RRGGBB or RGB or RRGGBB or rgb(R,G,B)
	 * @return the corresponding BaseColor object. Never returns null.
	 * @throws IllegalArgumentException
	 *             if the String isn't a know representation of a color.
	 */
	public static BaseColor getRGBColor(String name) {
		int[] color = { 0, 0, 0, 255 };
		String colorName = name.toLowerCase();
		boolean colorStrWithoutHash = missingHashColorFormat(colorName);
		if (colorName.


ex.InnerException?.Message is not null)
            {
                _console.WriteDim($"...and {ex.InnerException.Message}");
            }
            _console.WriteDim($"More specifically, {ex.Message}");
            _console.WriteBlankLine();
            _console.WriteDim(json);
        }

        return new BotResponse();
    }
}


eek(dp, pos, whence)
dlb* dp;
long pos;
int whence;
{
    if (!dlb_initialized)
        return EOF;
    if (dp->fp)
        return fseek(dp->fp, pos, whence);
    return do_dlb_fseek(dp, pos, whence);
}

char*
dlb_fgets(buf, len, dp)
char* buf;
int len;
dlb* dp;
{
    if (!dlb_initialized)
        return (char*)0;
    if (dp->fp)
        return fgets(buf, len, dp->fp);
    return do_dlb_fgets(buf, len, dp);
}

int
dlb_fgetc(dp)
dlb* dp;
{
    if (!dlb_initialized)
        return EOF;
    if (dp->fp)
        return fgetc(dp->fp);
    return do_dlb_fgetc(dp);
}

long
dlb_ftell(dp)
dlb* dp;
{
    if (!dlb_initialized)
        return 0;
    if (dp->fp)
        return ftell(dp->fp);
    return do_dlb_ftell(dp);
}

#endif /* DLB */

/*dlb.c*/


import requests
from typing import List, Dict

_EMOTION_TAG_MAP = {
    "happy": "happy",
    "sad": "sad",
    "angry": "angry",
    "fear": "dark",        # tag with decent coverage
    "disgust": "grunge",
    "surprise": "funk",
    "neutral": "chill",
}

def lf_tracks(emotion: str, api_key: str, limit: int = 10) -> List[Dict]:
    tag = _EMOTION_TAG_MAP.get(emotion.lower(), "pop")
    url = "https://ws.audioscrobbler.com/2.0/"
    params = {
        "method": "tag.gettoptracks",
        "tag": tag,
        "limit": limit,
        "api_key": api_key,
        "format": "json",
    }
    r = requests.get(url, params=params, timeout=15)
    r.raise_for_status()
    data = r.json()["tracks"]["track"]

    playlist = []
    for t in data:
        playlist.append(
            {
                "name": t["name"],
                "artist": t["artist"]["name"],
                "image_url": next((i["#text"] for i in t["image"] if i["size"] == "large"), None),
                "spotify_url": f"https://open.spotify.com/search/{t['artist']['name']} {t['name']}",
            }
        )
    return playlist


const addressOct = this.toOctets(address, opts)
        const netmaskOct = this.toOctets(netmask, opts)
        const hostId = IPv4.hostId(addressOct, netmaskOct)

        return this.toString(hostId)
    }

    /**
     * Gets all addresses in a specified range.
     * @param first The first address in the range
     * @param last The last address in the range
     * @returns All addresses in the specified IPv4 range
     */
    range(first: AddressRepresentation, last: AddressRepresentation): string[] {
        const firstOct = this.toOctets(first)
        const lastOct = this.toOctets(last)
        const addresses = IPv4.range(firstOct, lastOct)

        return addresses.map(a => this.toString(a))
    }

    /**
     * Checks wether the specified address is inside in the specified subnet
     * @param subnet Any address in the subnet to test
     * @param netmask The subnet mask used to test the address
     * @param address The address to test
     * @returns True if the address is located in the specified subnet
     */
    contains(subnet: AddressRepresentation, netmask: AddressRepresentation, address: AddressRepresentation): boolean | null {
        const subnetOct = this.toOctets(subnet)
        const netmaskOct = this.toOctets(netmask)
        const addressOct = this.toOctets(address)

        return IPv4.contains(subnetOct, netmaskOct, addressOct)
    }

    /**
     * Converts an address to its decimal representation.
     * @param value The address to be converted
     * @param opts Options used for the conversion
     * @returns The provided address as an unsigned integer
     */
    toDecimal(value: AddressRepresentation, opts?: BaseOpts): number | null {
        if (value == null || value == undefined) return null

        if (typeof value == 'number') {

            if (value <= - (2 ** 32) || value > IPV4_DECIMAL_MAX) {
                return throwOrNull(opts, 'Validation failed. Decimal value must be within 0 and 2^32')
            }

            return value >>> 0
        }

        const valueBytes = typeof value == 'string'
            ? value.split('.').map(x => x == null || x.length == 0 ? null : Number(x))
            : value

        if (valueBytes.length != 4) {
            return throwOrNull(opts, 'Validation failed. Addess must contain 4 octets')
        }

        let decValue = 0
        for (let index = 0; index < valueBytes.length; index++) {
            const octet = valueBytes[index]

            if (octet == null || isNaN(octet)) {
                return throwOrNull(opts, `Validation failed. Octet ${index} is not an integer`)
            }

            if (octet < 0 || octet > 255) {
                return throwOrNull(opts, `Validation failed. Invalid value in octet ${index}: ${octet}`)
            }

            decValue <<= 8
            decValue |= octet & 0xFF
        }

        return decValue >>> 0
    }

    /**
     * Converts an address into dot decimal notation.
     * If a string is passed it will be sanitized.
     * @param address The address to be converted
     * @returns The address as dot decimal notation
     */
    toString(address: AddressRepresentation, opts?: BaseOpts): string | null {
        const addressOctets = this.toOctets(address, opts)


я бы надеть Синтехмельные очки."}},
[11121] = {"ЕЖЕДНЕВНОЕ ИСПЫТАТЕЛЬНОЕ ЗАДАНИЕ (РЕЙД)", nil, {"Поговорите с <QUESTGIVER> в <AREA>."}},
[11122] = {"Туда и обратно", nil, {"Возьмите бочку у Флинна Огневара и верните ее Полу Янтарлену. Пока баран не сбежит от вас, постарайтесь доставить три бочки."}},
[11123] = {"[DEPRECATED]Inspecting the Ruins", nil, {"Поговорите с инспектором Таремом у трактира \"Последний привал\"."}},
[11124] = {"[DEPRECATED]Inspecting the Ruins", nil, {"Расследуйте дело в таверне \"Последний привал\", что стоит на границе Степей и Пылевых топей."}},
[11126] = {"Чужой среди своих", nil, {"Прогоните 5 дезертиров-подстрекателей и вернитесь к докам Терамора к Калии Гастингс."}},
[11128] = {"Пропагандистская война", nil, {"Доставьте дезертирскую пропаганду Калии Гастингс к докам в Тераморе."}},
[11129] = {"Пропал Кайл!", nil, {"Анаб Пшеничная Грива из деревни Кровавого Копыта в Мулгоре попросил найти его лучшего щенка, Кайла Бесноватого.\n\nПокормите Кайла нежным мясом долгонога и возвращайтесь к Анабу Пшеничной Гриве."}},
[11130] = {"Ой, блестяшечки!", nil, {"Жуль хочет, чтобы вы взяли его записку и отнесли ее Бадду в Призрачные земли к Зул'Аману."}},
[11131] = {"Гаси пожар!", nil, {"Переодетая попечительница сирот просит вас помочь потушить пожар в деревне. Когда пожар будет потушен, снова поговорите с попечительницей сирот."}},
[11132] = {"Все обещаешь и обещаешь", nil, {"Разыщите карту Бадда Недрека на террасе верховного шамана Налоракка в Зул'Амане и верните ее хозяину."}},
[11133] = {"Дискредитация вражеской агентуры", nil, {"Калия Гастингс просит вас всучить подправленные листовки 6 тераморским стражникам. После этого вернитесь к Калии и доложите о выполнении задания."}},
[11134] = {"Конец вражеской пропаганде", nil, {"Арестуйте Гависа Серого Щита, затем доложитесь Калии Гастингс у доков Терамора."}},
[11137] = {"[DEPRECATED]Defias in Dustwallow?", nil, {"Добудьте приказы


        let marker = metrics.marker("aaa");
        b.iter(|| test::black_box(marker.mark()));
    }
}
mod terminal;

use std::collections::hash_map::Keys;
use std::collections::HashMap;
use std::fs;
use std::io::{BufReader, Read};

use either;
use either::Either;
use futures::channel::mpsc;
use futures::future::FutureExt;
use futures::prelude::*;
use log::{error, info, warn};
use serde_derive::Deserialize;

use media::*;
use peer::PeerEventEnum;
use skyway_webrtc_gateway_api::peer::PeerCallEvent;
use skyway_webrtc_gateway_api::prelude::*;
use skyway_webrtc_gateway_api::*;

//==================== for parsing media.toml ====================
// It shows config toml formats
#[derive(Clone, Debug, Deserialize)]
struct Config {
    peer: PeerConfig,
    gateway: SocketConfig,
    media: Vec<MediaConfig>,
}

// It is internal format for config toml
#[derive(Clone, Debug, Deserialize)]
struct PeerConfig {
    pub peer_id: String,
    pub domain: String,
}

// It is internal format for config toml
#[derive(Clone, Debug, Deserialize)]
struct MediaConfig {
    pub video: bool,
    pub audio: bool,
    pub video_redirect: Option<RedirectSocketConfig>,
    pub video_params: Option<MediaParamConfig>,
    pub audio_redirect: Option<RedirectSocketConfig>,
    pub audio_params: Option<MediaParamConfig>,
}

// It is internal format for config toml
#[derive(Clone, Debug, Deserialize)]
struct SocketConfig {
    pub ip: String,
    pub port: u16,
}

// It is internal format for config toml
#[derive(Clone, Debug, Deserialize)]
struct RedirectSocketConfig {
    pub media_ip: String,
    pub media_port: u16,
    pub rtcp_ip: String,
    pub rtcp_port: u16,
}

// It is internal format for config toml
#[derive(Clone, Debug, Deserialize)]
struct MediaParamConfig {
    pub band_width: usize,
    pub codec: String,
    pub payload_type: u16,
    pub sampling_rate: usize,
}

// read config from toml file
fn read_config(path: &'static str) -> Config {
    let mut file_content = String::new();

    let mut fr = fs::File::open(path)
        .map(|f| BufReader::new(f))
        .expect("file open error");

    fr.read_to_string(&mut file_content)
        .expect("file read error");
    toml::from_str(&file_content).expect("toml parse error")
}

//==================== main ====================

// Main function creates a peer object and start listening peer events and keyboard events.
// Further processes are triggered by these events.
#[tokio::main]
async fn main() {
    // initialize logger
    if std::env::var("RUST_LOG").is_err() {
        std::env::set_var("RUST_LOG", "info");
        info!("RUST_LOG is not set. So it works as info mode.")
    }
    env_logger::init();

    //load and set parameters
    let api_key = ::std::env::var("API_KEY").expect("API_KEY is not set in environment variables");
    let config = read_config("example/media.toml");
    let domain = config.peer.domain;
    let peer_id = PeerId::new(config.peer.peer_id);
    let base_url: String = format!("http://{}:{}", config.gateway.ip, config.gateway.port);
    skyway_webrtc_gateway_api::initialize(base_url);

    //observe keyboard events
    let (key_notifier, key_observer) = mpsc::channel::<String>(0);
    let key_fut = terminal::read(key_


*](docs/OrderBookApi.md#v1orderbookssymbolidhistoryget) | **GET** /v1/orderbooks/{symbol_id}/history | Historical data
*OrderBookApi* | [**v1OrderbooksSymbolIdLatestGet**](docs/OrderBookApi.md#v1orderbookssymbolidlatestget) | **GET** /v1/orderbooks/{symbol_id}/latest | Latest data
*OrderBookL3Api* | [**v1Orderbooks3CurrentGet**](docs/OrderBookL3Api.md#v1orderbooks3currentget) | **GET** /v1/orderbooks3/current | Current order books
*OrderBookL3Api* | [**v1Orderbooks3SymbolIdCurrentGet**](docs/OrderBookL3Api.md#v1orderbooks3symbolidcurrentget) | **GET** /v1/orderbooks3/{symbol_id}/current | Current order book by symbol_id
*QuotesApi* | [**v1QuotesCurrentGet**](docs/QuotesApi.md#v1quotescurrentget) | **GET** /v1/quotes/current | Current data
*QuotesApi* | [**v1QuotesLatestGet**](docs/QuotesApi.md#v1quoteslatestget) | **GET** /v1/quotes/latest | Latest data
*QuotesApi* | [**v1QuotesSymbolIdCurrentGet**](docs/QuotesApi.md#v1quotessymbolidcurrentget) | **GET** /v1/quotes/{symbol_id}/current | Current quotes for a specific symbol
*QuotesApi* | [**v1QuotesSymbolIdHistoryGet**](docs/QuotesApi.md#v1quotessymbolidhistoryget) | **GET** /v1/quotes/{symbol_id}/history | Historical data
*QuotesApi* | [**v1QuotesSymbolIdLatestGet**](docs/QuotesApi.md#v1quotessymbolidlatestget) | **GET** /v1/quotes/{symbol_id}/latest | Latest quote updates for a specific symbol
*TradesApi* | [**v1TradesLatestGet**](docs/TradesApi.md#v1tradeslatestget) | **GET** /v1/trades/latest | Latest data
*TradesApi* | [**v1TradesSymbolIdHistoryGet**](docs/TradesApi.md#v1tradessymbolidhistoryget) | **GET** /v1/trades/{symbol_id}/history | Historical data
*TradesApi* | [**v1TradesSymbolIdLatestGet**](docs/TradesApi.md#v1tradessymbolidlatestget) | **GET** /v1/trades/{symbol_id}/latest | Latest data by symbol_id

## Documentation For Models

 - [ModelsExchangeTimeseriesItem](docs/ModelsExchangeTimeseriesItem.md)
 - [OptionsOptionExchangeGroup](docs/OptionsOptionExchangeGroup.md)
 - [OptionsStrike](docs/OptionsStrike.md)
 - [V1Asset](docs/V1Asset.md)
 - [V1Chain](docs/V1Chain.md)
 - [V1ChainNetworkAddress](docs/V1ChainNetworkAddress.md)
 - [V1Exchange](docs/V1Exchange.md)
 - [V1ExchangeRate](docs/V1ExchangeRate.md)
 - [V1ExchangeRates](docs/V1ExchangeRates.md)
 - [V1ExchangeRatesRate](docs/V1ExchangeRatesRate.md)
 - [V1ExchangeRatesTimeseriesItem](docs/V1ExchangeRatesTimeseriesItem.md)
 - [V1GeneralData](docs/V1GeneralData.md)
 - [V1Icon](docs/V1Icon.md)
 - [V1LastTrade](docs/V1LastTrade.md)
 - [V1ListingItem](docs/V1ListingItem.md)
 - [V1Metric](docs/V1Metric.md)
 - [V1MetricData](docs/V1MetricData.md)
 - [V1MetricInfo](docs/V1MetricInfo.md)
 - [V1OrderBook](docs/V1OrderBook.md)
 - [V1OrderBookBase](docs/V1OrderBookBase.md)
 - [V1OrderBookDepth](docs/V1OrderBookDepth.md)
 - [V1Quote](docs/V1Quote.md)
 - [V1QuoteTrade](docs/V1QuoteTrade.md)
 - [V


cxd-Form .cxd-Form-item>.cxd-Form-label{flex:0 0 28%;max-width:28%;min-height:1px;text-align:left;padding-right:calc(var(--Form--horizontal-gutterWidth)/2);overflow-wrap:break-word;margin-right:0;margin-bottom:0;font-size:var(--fontSizeLg)}.cxd-Form .cxd-Form-item .cxd-Form-description{font-size:var(--fontSizeBase)}.cxd-Form .cxd-Form-item .cxd-TextControl-input{font-size:var(--fontSizeLg)}.cxd-Form .cxd-Form-item .cxd-TextControl-input input{height:calc(var(--Form-input-lineHeight)*var(--fontSizeLg))}.cxd-Form .cxd-Form-item .cxd-Form-control,.cxd-Form .cxd-Form-item .cxd-Form-value{flex:1;flex-wrap:wrap;font-size:var(--fontSizeLg)}.cxd-Form .cxd-Form-item .cxd-Form-control.is-disabled>.cxd-TextControl-input,.cxd-Form .cxd-Form-item .cxd-Form-value.is-disabled>.cxd-TextControl-input{background:transparent}.cxd-Form .cxd-Form-item .cxd-SelectControl.cxd-Form-control{overflow:hidden}.cxd-Form .cxd-Form-item .cxd-CheckboxControl,.cxd-Form .cxd-Form-item .cxd-CheckboxesControl,.cxd-Form .cxd-Form-item .cxd-Form-group--hor .cxd-Form-item,.cxd-Form .cxd-Form-item .cxd-Form-hint,.cxd-Form .cxd-Form-item .cxd-Form-remark,.cxd-Form .cxd-Form-item .cxd-Form-static,.cxd-Form .cxd-Form-item .cxd-RadiosControl,.cxd-Form .cxd-Form-item .cxd-SwitchControl{padding-top:0;padding-bottom:0}.cxd-Form .cxd-Form-item .cxd-Form-group--horizontal .cxd-TextControl-input input{height:var(--Form-input-height)}.cxd-Form .cxd-Form-item .cxd-Form-hint{font-size:var(--fontSizeBase);margin-left:0;color:var(--text--muted-color)}.cxd-Form .cxd-Form-item .cxd-TextControl-placeholder{top:0}.cxd-Form .cxd-Form-item .cxd-Form-static{min-height:0}.cxd-Form .cxd-Form-item .cxd-Form-description,.cxd-Form .cxd-Form-item .cxd-Form-feedback{font-size:var(--fontSizeBase)}.cxd-Form .cxd-Form-item .cxd-InputGroup .cxd-InputGroup-btn .cxd-Button,.cxd-Form .cxd-Form-item .cxd-InputGroup .cxd-Select{border:none}.cxd-Form .cxd-Form-item .cxd-InputGroup>.cxd-TextControl-input input{height:var(--Form-input-height)}.cxd-Form .cxd-Form-item .cxd-ColorPicker{padding:0;border:none}.cxd-Form .cxd-Form-item .cxd-ColorPicker .cxd-ColorPicker-arrow{display:none}.cxd-Form .cxd-Form-item .cxd-Form-group--hor .cxd-Form-item .cxd-Button{margin-bottom:var(--gap-xs)}.cxd-Form .cxd-Form-item .cxd-Form-control>.cxd-TextControl-input,.cxd-Form .cxd-Form-item .cxd-TextControl.is-focused>.cxd-TextControl-input,.cxd-Form .cxd-Form-item .cxd-TextareaControl>textarea{border:none;padding:0 var(--Form-input-paddingX) 0 0;box-shadow:none}.cxd-Form .cxd-Form-item .cxd-Form-control>.cxd-TextCon


 5;
            this.downloadSettingsFileButton.Text = "Download settings file";
            this.downloadSettingsFileButton.UseVisualStyleBackColor = true;
            this.downloadSettingsFileButton.Click += new System.EventHandler(this.downloadSettingsFileButton_Click);
            //
            // uploadSettingsFileButton
            //
            this.uploadSettingsFileButton.Location = new System.Drawing.Point(25, 9);
            this.uploadSettingsFileButton.Name = "uploadSettingsFileButton";
            this.uploadSettingsFileButton.Size = new System.Drawing.Size(122, 23);
            this.uploadSettingsFileButton.TabIndex = 4;
            this.uploadSettingsFileButton.Text = "Upload settings file";
            this.uploadSettingsFileButton.UseVisualStyleBackColor = true;
            this.uploadSettingsFileButton.Click += new System.EventHandler(this.uploadSettingsFileButton_Click);
            //
            // apiResponseLabel
            //
            this.apiResponseLabel.Location = new System.Drawing.Point(0, 36);
            this.apiResponseLabel.Name = "apiResponseLabel";
            this.apiResponseLabel.Size = new System.Drawing.Size(405, 31);
            this.apiResponseLabel.TabIndex = 8;
            this.apiResponseLabel.Text = "BattleClinic\r\nAPI Responce";
            this.apiResponseLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // throbber
            //
            this.throbber.Location = new System.Drawing.Point(190, 39);
            this.throbber.MaximumSize = new System.Drawing.Size(24, 24);
            this.throbber.MinimumSize = new System.Drawing.Size(24, 24);
            this.throbber.Name = "throbber";
            this.throbber.Size = new System.Drawing.Size(24, 24);
            this.throbber.State = EVEMon.Controls.ThrobberState.Stopped;
            this.throbber.TabIndex = 9;
            this.throbber.TabStop = false;
            //
            // SettingsFileStorageControl
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.apiResponseLabel);
            this.Controls.Add(this.throbber);
            this.Controls.Add(this.alwaysDownloadcheckBox);
            this.Controls.Add(this.alwaysUploadCheckBox);
            this.Controls.Add(this.downloadSettingsFileButton);
            this.Controls.Add(this.uploadSettingsFileButton);
            this.Name = "SettingsFileStorageControl";
            this.Size = new System.Drawing.Size(405, 102);
            this.Load += new System.EventHandler(this.SettingsFileStorageControl_Load);
            ((System.ComponentModel.ISupportInitialize)(this.throbber)).EndInit();
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.CheckBox alwaysDownloadcheckBox;
        private System.Windows.Forms.CheckBox alwaysUploadCheckBox;
        private System.Windows.Forms.Button downloadSettingsFileButton;
        private System.Windows.Forms.Button uploadSettingsFileButton;
        private System.Windows.Forms.Label apiResponseLabel;
        private Controls.Throbber throbber;
    }
}