mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-09-14 20:34:19 +08:00
Compare commits
143
Commits
23a6a22cf3
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
26d174538f | ||
|
|
d9f7c5c117 | ||
|
|
7614ee5c63 | ||
|
|
70d35bab31 | ||
|
|
bdd9cea5d7 | ||
|
|
795028f9ea | ||
|
|
cdcf288975 | ||
|
|
83bcd4708f | ||
|
|
07891fa751 | ||
|
|
5f6047bcba | ||
|
|
f56e31d6d8 | ||
|
|
84e13cad49 | ||
|
|
b5ce6b03b2 | ||
|
|
0ee799dbde | ||
|
|
91e0df6c86 | ||
|
|
d9c423b124 | ||
|
|
bea159edee | ||
|
|
9dcc7b440b | ||
|
|
e4a587bfc3 | ||
|
|
705f63c409 | ||
|
|
e895da1d6b | ||
|
|
87517f518f | ||
|
|
ca30fdbbbb | ||
|
|
81d5757031 | ||
|
|
18bc066e07 | ||
|
|
7b0b16dcd4 | ||
|
|
0e9e9c2496 | ||
|
|
3a12ffbcad | ||
|
|
e45467bc23 | ||
|
|
99e36fe9b0 | ||
|
|
f8f5792e57 | ||
|
|
a179224c4d | ||
|
|
302b45db1b | ||
|
|
b6b067e0ad | ||
|
|
b0cf524450 | ||
|
|
f4103e8c2a | ||
|
|
2d6112f2cd | ||
|
|
3d2cd8c73a | ||
|
|
629b00127c | ||
|
|
51ae3e2992 | ||
|
|
8ff254bfa0 | ||
|
|
6e956beb69 | ||
|
|
c05bdbe2bc | ||
|
|
7cef4bfa84 | ||
|
|
6348b68a14 | ||
|
|
95ded25b90 | ||
|
|
4b545cbffa | ||
|
|
65e584daaa | ||
|
|
cb845a1f2d | ||
|
|
3f15c041aa | ||
|
|
b2ff7cbe2f | ||
|
|
c27f496810 | ||
|
|
dee375ce66 | ||
|
|
7c496d5738 | ||
|
|
d3321f4c3c | ||
|
|
f5aa63986c | ||
|
|
a2faaa2a01 | ||
|
|
570b248f8b | ||
|
|
87d47fbcb2 | ||
|
|
380ee71a08 | ||
|
|
8ca86b3a5e | ||
|
|
dbdd70b00d | ||
|
|
e70e8fddee | ||
|
|
02c6c789ba | ||
|
|
f638f12257 | ||
|
|
259b690118 | ||
|
|
fc820ab4f5 | ||
|
|
8eec681054 | ||
|
|
01aa5b5f9e | ||
|
|
28a85181b8 | ||
|
|
5f9dbf5e2d | ||
|
|
70e84ddf56 | ||
|
|
e0826e34a3 | ||
|
|
b92e3e9efb | ||
|
|
24345f777c | ||
|
|
695b29172f | ||
|
|
aac1b49f77 | ||
|
|
8eaa48a277 | ||
|
|
6ad046d5b6 | ||
|
|
d0f52bd3f5 | ||
|
|
25ff979f91 | ||
|
|
f2af90562f | ||
|
|
cac0bc6d4c | ||
|
|
1f194cfbed | ||
|
|
9f4be58e93 | ||
|
|
7bf0d12a49 | ||
|
|
50d5c68bec | ||
|
|
a65cd2a696 | ||
|
|
92c3e430e5 | ||
|
|
58f9300b4a | ||
|
|
2b9479b1ed | ||
|
|
610ab4b79a | ||
|
|
eb2b4e956d | ||
|
|
e9d23393c1 | ||
|
|
22565d103c | ||
|
|
22285ed654 | ||
|
|
8cbf526882 | ||
|
|
2a19f43c9e | ||
|
|
a2635cb70a | ||
|
|
6ab5dde746 | ||
|
|
a0412f91a9 | ||
|
|
221a4bc6ae | ||
|
|
cf0c9e3564 | ||
|
|
b975999290 | ||
|
|
bb4b6094e3 | ||
|
|
dd41e8d648 | ||
|
|
5093acfe28 | ||
|
|
eea38c835c | ||
|
|
28e8ae5ca9 | ||
|
|
e1f8fcd79e | ||
|
|
2afb356964 | ||
|
|
7dae33e577 | ||
|
|
951ef13e31 | ||
|
|
ca1245d63e | ||
|
|
2ef14df650 | ||
|
|
7aced82c07 | ||
|
|
7797adc28b | ||
|
|
e92ae720d3 | ||
|
|
03e0670c3f | ||
|
|
b6b304663d | ||
|
|
cdda1ac76b | ||
|
|
49c2813666 | ||
|
|
c255e197f1 | ||
|
|
0ed5334ff8 | ||
|
|
2b816cc67d | ||
|
|
8530ecccd2 | ||
|
|
540e1d3dcc | ||
|
|
cce79ad2ee | ||
|
|
d381f0df47 | ||
|
|
2f4d9baa04 | ||
|
|
d8bdedeed3 | ||
|
|
aa62e16d4b | ||
|
|
ade21a38d0 | ||
|
|
61a1fa1913 | ||
|
|
9ae7e779c4 | ||
|
|
10a2d6362b | ||
|
|
508ec1a68f | ||
|
|
153543af85 | ||
|
|
f3d45a26a8 | ||
|
|
b341798cdd | ||
|
|
04e8cdd08f | ||
|
|
82aaee7f65 | ||
|
|
045d307bfe |
@@ -1,3 +1,136 @@
|
|||||||
|
--- a/luci-app-argon-config/root/etc/config/argon
|
||||||
|
+++ b/luci-app-argon-config/root/etc/config/argon
|
||||||
|
@@ -3,8 +3,8 @@ config global
|
||||||
|
option dark_primary '#483d8b'
|
||||||
|
option blur '10'
|
||||||
|
option blur_dark '10'
|
||||||
|
- option transparency '0.5'
|
||||||
|
- option transparency_dark '0.5'
|
||||||
|
- option mode 'normal'
|
||||||
|
- option online_wallpaper 'bing'
|
||||||
|
+ option transparency '0.3'
|
||||||
|
+ option transparency_dark '0.3'
|
||||||
|
+ option mode 'dark'
|
||||||
|
+ option online_wallpaper 'default'
|
||||||
|
|
||||||
|
|
||||||
|
--- a/luci-app-argon-config/htdocs/luci-static/resources/view/argon-config.js
|
||||||
|
+++ b/luci-app-argon-config/htdocs/luci-static/resources/view/argon-config.js
|
||||||
|
@@ -50,11 +50,12 @@ return view.extend({
|
||||||
|
s.anonymous = true;
|
||||||
|
|
||||||
|
o = s.option(form.ListValue, 'online_wallpaper', _('Wallpaper source'));
|
||||||
|
+ o.value('default', _('Default'));
|
||||||
|
o.value('none', _('Built-in'));
|
||||||
|
o.value('bing', _('Bing'));
|
||||||
|
o.value('unsplash', _('Unsplash'));
|
||||||
|
o.value('wallhaven', _('Wallhaven'));
|
||||||
|
- o.default = 'bing';
|
||||||
|
+ o.default = 'default';
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.option(form.ListValue, 'mode', _('Theme mode'));
|
||||||
|
|
||||||
|
--- a/luci-theme-argon/ucode/template/themes/argon/header_login.ut
|
||||||
|
+++ b/luci-theme-argon/ucode/template/themes/argon/header_login.ut
|
||||||
|
@@ -46,7 +46,7 @@
|
||||||
|
|
||||||
|
-%}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
-<html lang="{{ dispatcher.lang }}">
|
||||||
|
+<html lang="{{ dispatcher.lang }}"{% if (mode == 'light'): %} data-darkmode="false"{% else %} data-darkmode="true"{% endif %}>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
{% include("themes/" + theme + "/head_meta", { hostname: hostname, node: node, bar_color: bar_color, media: media }) %}
|
||||||
|
@@ -54,9 +54,7 @@
|
||||||
|
<link rel="stylesheet" href="{{ media }}/css/cascade.css{# ?v=PKG_VERSION #}">
|
||||||
|
<style title="text/css">
|
||||||
|
{% if (mode == 'normal'): %}
|
||||||
|
- @media (prefers-color-scheme: dark) {
|
||||||
|
{{ dark_css }}
|
||||||
|
- }
|
||||||
|
{% endif %}
|
||||||
|
{% if (mode == 'dark'): %}
|
||||||
|
{{ dark_css }}
|
||||||
|
|
||||||
|
--- a/luci-theme-argon/ucode/template/themes/argon/header.ut
|
||||||
|
+++ b/luci-theme-argon/ucode/template/themes/argon/header.ut
|
||||||
|
@@ -55,9 +55,7 @@
|
||||||
|
<link rel="stylesheet" href="{{ media }}/css/cascade.css{# ?v=PKG_VERSION #}">
|
||||||
|
<style title="text/css">
|
||||||
|
{% if (mode == 'normal'): %}
|
||||||
|
- @media (prefers-color-scheme: dark) {
|
||||||
|
{{ dark_css }}
|
||||||
|
- }
|
||||||
|
{% endif %}
|
||||||
|
{% if (mode == 'dark'): %}
|
||||||
|
{{ dark_css }}
|
||||||
|
|
||||||
|
--- a/luci-theme-argon/ucode/template/themes/argon/header.ut
|
||||||
|
+++ b/luci-theme-argon/ucode/template/themes/argon/header.ut
|
||||||
|
@@ -47,7 +47,7 @@
|
||||||
|
|
||||||
|
-%}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
-<html lang="{{ dispatcher.lang }}">
|
||||||
|
+<html lang="{{ dispatcher.lang }}"{% if (mode == 'light'): %} data-darkmode="false"{% else %} data-darkmode="true"{% endif %}>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
{% include("themes/" + theme + "/head_meta", { hostname: hostname, node: node, bar_color: bar_color, media: media }) %}
|
||||||
|
|
||||||
|
--- a/luci-theme-argon/ucode/template/themes/argon/sysauth.ut
|
||||||
|
+++ b/luci-theme-argon/ucode/template/themes/argon/sysauth.ut
|
||||||
|
@@ -115,11 +115,12 @@
|
||||||
|
<!-- Video Player End -->
|
||||||
|
{% else %}
|
||||||
|
<!-- Image Background Start -->
|
||||||
|
- <div class="main-bg" id="main-bg" style="background-image:url({{ bgArry.bgUrl }})"></div>
|
||||||
|
+ {% online_wallpaper = cfg.get_first('argon', 'global', 'online_wallpaper') ?? 'default' %}
|
||||||
|
+ <div class="main-bg" id="main-bg" {% if (online_wallpaper != 'default'): %}style="background-image:url({{ bgArry.bgUrl }})"{% endif %}></div>
|
||||||
|
<!-- Image Background End -->
|
||||||
|
{% endif %}
|
||||||
|
<!-- Login Container Start -->
|
||||||
|
- <div class="login-container">
|
||||||
|
+ <div class="login-container" {% if (online_wallpaper == 'default'): %} style="backdrop-filter: blur(0px)"{% endif %}>
|
||||||
|
<div class="login-form">
|
||||||
|
<!-- Logo Start -->
|
||||||
|
<a class="brand" href="/"><img src="{{ media }}/img/argon.svg" class="icon">
|
||||||
|
|
||||||
|
--- a/luci-theme-argon/htdocs/luci-static/argon/css/cascade.css
|
||||||
|
+++ b/luci-theme-argon/htdocs/luci-static/argon/css/cascade.css
|
||||||
|
@@ -103,6 +103,22 @@ body {
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
+body::before {
|
||||||
|
+ content: "";
|
||||||
|
+ background-image: url("/luci-static/argon/img/pattern.svg");
|
||||||
|
+ background-repeat: repeat;
|
||||||
|
+ background-size: 440px auto;
|
||||||
|
+ position: fixed;
|
||||||
|
+ top: 0;
|
||||||
|
+ left: 0;
|
||||||
|
+ right: 0;
|
||||||
|
+ bottom: 0;
|
||||||
|
+ z-index: -1;
|
||||||
|
+ pointer-events: none;
|
||||||
|
+ opacity: .3;
|
||||||
|
+}
|
||||||
|
+:root[data-darkmode="false"] body::before {opacity: .8}
|
||||||
|
+.main .main-right{background-color: transparent !important}
|
||||||
|
main {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
@@ -718,7 +734,7 @@ select[multiple="multiple"] {
|
||||||
|
}
|
||||||
|
.login-page .login-container {
|
||||||
|
z-index: 10;
|
||||||
|
- margin-left: 5%;
|
||||||
|
+ margin: 0 auto;
|
||||||
|
display: flex;
|
||||||
|
height: 100vh;
|
||||||
|
width: 26rem;
|
||||||
|
|
||||||
--- a/luci-theme-argon/ucode/template/themes/argon/footer.ut
|
--- a/luci-theme-argon/ucode/template/themes/argon/footer.ut
|
||||||
+++ b/luci-theme-argon/ucode/template/themes/argon/footer.ut
|
+++ b/luci-theme-argon/ucode/template/themes/argon/footer.ut
|
||||||
@@ -19,13 +19,6 @@
|
@@ -19,13 +19,6 @@
|
||||||
@@ -14,3 +147,570 @@
|
|||||||
|
|
||||||
<a class="luci-link" href="{{ version.disturl }}" target="_blank">{{ version.distname }} {{ version.distversion }}-{{ version.distrevision }}</a>
|
<a class="luci-link" href="{{ version.disturl }}" target="_blank">{{ version.distname }} {{ version.distversion }}-{{ version.distrevision }}</a>
|
||||||
|
|
||||||
|
--- a/luci-theme-argon/ucode/template/themes/argon/footer_login.ut
|
||||||
|
+++ b/luci-theme-argon/ucode/template/themes/argon/footer_login.ut
|
||||||
|
@@ -20,8 +20,6 @@
|
||||||
|
<!-- added style="text-wrap: auto" but on this page it is still not the best solution. I will take it to consideration next time :) -->
|
||||||
|
<footer style="text-wrap: auto">
|
||||||
|
<div>
|
||||||
|
- <a class="luci-link" href="https://github.com/openwrt/luci" target="_blank">Powered by {{ version.luciname }} ({{ version.luciversion }})</a>
|
||||||
|
- <a href="https://github.com/jerrykuku/luci-theme-argon" target="_blank">ArgonTheme {# vPKG_VERSION #}</a>
|
||||||
|
<a class="luci-link" href="{{ version.disturl }}" target="_blank">{{ version.distname }} {{ version.distversion }}-{{ version.distrevision }}</a>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
diff --git a/luci-theme-argon/htdocs/luci-static/argon/img/pattern.svg b/luci-theme-argon/htdocs/luci-static/argon/img/pattern.svg
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..72eb03cdc
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/luci-theme-argon/htdocs/luci-static/argon/img/pattern.svg
|
||||||
|
@@ -0,0 +1,550 @@
|
||||||
|
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
+<svg
|
||||||
|
+ version="1.0"
|
||||||
|
+ width="870.000000pt"
|
||||||
|
+ height="870.000000pt"
|
||||||
|
+ viewBox="0 0 870.000000 870.000000"
|
||||||
|
+ preserveAspectRatio="xMidYMid meet"
|
||||||
|
+ id="svg90"
|
||||||
|
+ sodipodi:docname="cats_final3.svg"
|
||||||
|
+ inkscape:version="1.4.3 (0d15f75, 2025-12-25)"
|
||||||
|
+ xml:space="preserve"
|
||||||
|
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
+ xmlns="http://www.w3.org/2000/svg"
|
||||||
|
+ xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
+<g opacity="0.20">
|
||||||
|
+<defs
|
||||||
|
+ id="defs90"><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect103"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect102"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect101"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect99"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect98"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect97"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect97-5"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect98-3"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect99-5"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect101-6"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect102-2"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /><inkscape:path-effect
|
||||||
|
+ effect="bspline"
|
||||||
|
+ id="path-effect103-9"
|
||||||
|
+ is_visible="true"
|
||||||
|
+ lpeversion="1.3"
|
||||||
|
+ weight="33.333333"
|
||||||
|
+ steps="2"
|
||||||
|
+ helper_size="0"
|
||||||
|
+ apply_no_weight="true"
|
||||||
|
+ apply_with_weight="true"
|
||||||
|
+ only_selected="false"
|
||||||
|
+ uniform="false" /></defs><sodipodi:namedview
|
||||||
|
+ id="namedview90"
|
||||||
|
+ pagecolor="#ffffff"
|
||||||
|
+ bordercolor="#000000"
|
||||||
|
+ borderopacity="0.25"
|
||||||
|
+ inkscape:showpageshadow="2"
|
||||||
|
+ inkscape:pageopacity="0.0"
|
||||||
|
+ inkscape:pagecheckerboard="0"
|
||||||
|
+ inkscape:deskcolor="#d1d1d1"
|
||||||
|
+ inkscape:document-units="pt"
|
||||||
|
+ inkscape:zoom="11.313708"
|
||||||
|
+ inkscape:cx="57.010484"
|
||||||
|
+ inkscape:cy="819.84612"
|
||||||
|
+ inkscape:window-width="2560"
|
||||||
|
+ inkscape:window-height="1371"
|
||||||
|
+ inkscape:window-x="0"
|
||||||
|
+ inkscape:window-y="0"
|
||||||
|
+ inkscape:window-maximized="1"
|
||||||
|
+ inkscape:current-layer="layer3"><inkscape:page
|
||||||
|
+ x="0"
|
||||||
|
+ y="0"
|
||||||
|
+ width="870"
|
||||||
|
+ height="870"
|
||||||
|
+ id="page123"
|
||||||
|
+ margin="0"
|
||||||
|
+ bleed="0" /></sodipodi:namedview><metadata
|
||||||
|
+ id="metadata1">
|
||||||
|
+Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||||
|
+</metadata><g
|
||||||
|
+ inkscape:groupmode="layer"
|
||||||
|
+ id="layer3"
|
||||||
|
+ inkscape:label="Layer 1"
|
||||||
|
+ style="display:inline"><path
|
||||||
|
+ d="m 188.7,6.5 -5.8,6.2 -13,0.7 -13,0.7 -4.8,-5.1 c -3.7,-3.9 -5.4,-5.1 -7.2,-4.8 -2.9,0.4 -5.5,5.4 -5.7,11.2 -0.3,6.7 -4.1,16.7 -7.8,20.6 -3.9,4.2 -4.1,5.3 -1.4,8.7 1.1,1.4 2,3.6 2,4.9 0,5.9 2.9,9.6 12.6,16.2 8.6,5.7 8.9,6.8 8.9,29.2 -0.1,17.6 -0.2,18.9 -2.9,26.9 -2.3,6.8 -2.7,9.1 -2,12 0.7,2.9 1.4,3.7 3.7,3.9 1.8,0.2 3.7,-0.4 4.9,-1.5 2.5,-2.3 5.8,-8.6 5.8,-11.2 0,-1.1 0.4,-2.2 0.9,-2.5 0.4,-0.3 1.1,-2.4 1.4,-4.7 1,-7.6 9,-12.9 11.8,-7.7 0.9,1.6 0.8,5.1 -0.2,14.6 l -1.3,12.4 2.5,1.9 c 1.3,1 2.9,1.9 3.5,1.9 2.3,0 5.2,-4.8 6.8,-11.5 5.2,-20.9 5.6,-21.6 13.6,-21 3.2,0.3 8.1,1 10.7,1.6 3,0.7 13.4,1.2 27.3,1.1 14.3,0 22.9,0.3 23.7,1 1.8,1.4 1.6,9.8 -0.3,17.8 -1.7,7.3 -1.3,10.5 1.6,12 2.1,1.2 4.8,0.2 8.1,-2.9 2.1,-1.9 4.9,-11.8 4.9,-17.2 0,-3.5 3.3,-9.9 5.6,-10.6 1.1,-0.4 2.7,4.2 6.5,18.7 1.2,4.7 2.9,9.3 3.7,10.2 1.6,1.9 7.2,2.5 7.2,0.9 0,-0.5 0.6,-1.6 1.4,-2.4 1.2,-1.2 1.5,-7.4 1.8,-35.3 0.1,-18.7 -0.1,-37.8 -0.6,-42.5 -0.8,-8.2 -0.7,-9 1.8,-14.4 1.4,-3.2 2.6,-6.8 2.6,-8.1 0,-4.1 -4.8,-11.9 -10,-16.3 -5.7,-4.8 -10.2,-6.6 -19.8,-7.9 -3.7,-0.6 -8.3,-1.9 -10.1,-3 -4.1,-2.5 -7.3,-1.4 -9.2,3 -1,2.6 -0.9,3.3 1,5.6 1.2,1.5 2.4,3.4 2.7,4.2 0.8,2.3 8.4,6 12.4,6 4.4,0 11,3.7 13,7.3 1.3,2.4 1.3,3 0,5.4 -1.5,2.7 -1.9,2.8 -8.5,2.5 -3.9,-0.1 -18.2,-0.4 -32,-0.6 -13.7,-0.1 -26,-0.6 -27.3,-1 -3.1,-1 -4.4,-4.8 -3.6,-10.7 0.6,-4.4 0.4,-5.1 -2.3,-7.8 -1.7,-1.6 -3.7,-4.5 -4.5,-6.3 -0.8,-1.8 -3,-6.8 -4.9,-11 -3.3,-7.6 -3.5,-7.7 -6.9,-7.6 -3,0 -4.4,1 -9.3,6.3 z m 12.5,3.5 c 1,3 3.2,8.3 4.8,11.8 1.6,3.4 3.5,8.4 4.1,11 1.8,7 5.5,14.9 7.6,16 1,0.6 16.2,1.1 35.6,1.3 l 33.7,0.4 2.5,-3 c 1.8,-2.3 2.4,-4.2 2.5,-7.9 0,-4.3 -0.4,-5.2 -3.6,-8.2 -1.9,-1.9 -4.3,-3.4 -5.3,-3.4 -6.6,0 -19.1,-6.9 -19.1,-10.5 0,-2.4 1.6,-2.5 7.5,-0.5 3.2,1.1 6.9,2 8.1,2 1.3,0 4.6,0.8 7.3,1.9 14.1,5.3 19.4,16.4 12.9,26.9 -2,3.2 -2,4.2 -1.2,17 1.3,20.1 0.5,68.3 -1.1,70.1 -1.1,1.1 -1.6,0.4 -2.8,-4 -0.9,-3 -2.1,-7.7 -2.7,-10.4 -4,-18.2 -14.2,-19.3 -16.4,-1.7 -0.4,2.9 -1.3,6.7 -2.1,8.5 -0.7,1.8 -1.6,4.5 -2,6 -0.3,1.6 -1.1,2.7 -1.8,2.4 -0.9,-0.3 -1.1,-3.8 -0.8,-13.4 0.5,-17.3 2,-16.3 -24.4,-16.4 -18.2,0 -25,-0.4 -41.6,-2.5 -9.5,-1.1 -13.8,2.9 -15.5,14.3 -0.7,5.3 -4.2,14.3 -5.4,14.3 -1.4,0 -1.7,-2.3 -0.9,-6 1.4,-5.8 1.1,-19.4 -0.4,-21.5 -1.2,-1.5 -2.2,-1.7 -5.7,-1.1 -8.3,1.3 -13.5,7.7 -14.7,17.9 -0.7,5.6 -2.7,9.7 -4.9,9.7 -2.5,0 -2.5,-2.1 0.6,-13.3 2.7,-10.4 3,-12.7 3,-27 0,-9.3 -0.4,-15.8 -1,-16.2 -0.5,-0.3 -1,-1.4 -1,-2.4 0,-2 -7,-9 -11.8,-11.7 -4.1,-2.4 -8.1,-8.1 -9.3,-13.5 -0.9,-3.7 -0.6,-5.1 2.6,-12.4 1.9,-4.5 3.5,-9.5 3.5,-11.1 0,-4.2 1.8,-10 3.5,-11.4 1.2,-1 2.3,-0.5 5.9,2.8 5.7,5.3 8.3,5.9 17,3.8 3.9,-0.9 8.6,-1.6 10.4,-1.6 4.6,0 10.1,-3.3 14.2,-8.5 1.9,-2.4 4.1,-4.3 4.9,-4.2 0.8,0.1 2.2,2.7 3.3,5.7 z"
|
||||||
|
+ id="path1"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 168,33 c -2.3,4.4 2.9,8 6.4,4.4 3,-2.9 1.6,-5.5 -3.1,-6.2 -1.4,-0.1 -2.6,0.5 -3.3,1.8 z"
|
||||||
|
+ id="path2"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 147.4,33.1 c -1,1.7 1.3,3.6 2.7,2.2 1.2,-1.2 0.4,-3.3 -1.1,-3.3 -0.5,0 -1.2,0.5 -1.6,1.1 z"
|
||||||
|
+ id="path3"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 617.8,42.1 c -1,0.5 -1.8,1.6 -1.8,2.3 0,0.7 -0.8,2.4 -1.9,3.7 -3.8,4.9 -5.4,16.7 -5.6,41.4 l -0.3,23 -4.4,-0.1 c -4.9,-0.2 -9.7,-2.3 -13.7,-6 -2.7,-2.5 -6.5,-3.2 -7.6,-1.4 -0.6,1 -1.2,7.2 -1.4,14.1 -0.1,2.2 -0.7,2.8 -3.6,3.3 -1.9,0.4 -5.1,2.2 -7.1,4.1 -4.4,4.2 -5.9,4.3 -10.4,1 -2.5,-1.8 -4.6,-2.5 -8.2,-2.5 -4.4,0 -4.8,0.2 -4.8,2.3 0,1.3 0.6,4.3 1.4,6.8 5.1,16.2 6.7,23.1 6.2,25.6 -0.6,2.4 0.1,3.5 4.9,8.2 3,3 5.5,5.8 5.5,6.2 0,1.4 14.7,9.9 17.2,9.9 3.2,0 5.1,2.3 6.7,7.9 0.7,2.5 2.5,7.2 4,10.5 3.7,8.2 4.6,10.9 6.6,19.1 1.6,6.5 1.6,7.3 0.1,10.9 -0.9,2.1 -1.6,5.6 -1.6,7.7 0,3.3 0.4,4.1 2.5,4.9 7.3,2.8 12.9,-5 14.7,-20.3 1.4,-12.2 1.8,-12.5 13.5,-11.9 l 9.2,0.4 2,4.1 c 1.1,2.3 2.4,6.8 3,10 1.6,8.8 4,12.6 9.9,15.4 3.1,1.5 3.5,1.5 6,-0.4 3.5,-2.6 3.8,-5.1 1.2,-11.2 -1.9,-4.2 -2.1,-6.4 -1.8,-14.3 0.2,-5.9 0.9,-10.6 2,-12.8 2.4,-5 4.8,-18.1 4.8,-26 0,-9.5 -2.6,-22 -5.8,-28.2 -2.4,-4.8 -17.5,-20.8 -19.5,-20.8 -0.4,0 -2.7,-1.8 -5,-4 -4.3,-3.9 -4.7,-4.9 -8.8,-18.6 -1.4,-4.7 -1.1,-21.9 0.6,-31.4 2.2,-12.7 2,-26.7 -0.5,-30.8 -2.1,-3.3 -4.9,-4.1 -8.2,-2.1 z m 4.4,5.6 c 0.1,1 0.2,16.6 0.2,34.8 0.1,32.7 0.1,33 2.5,37.5 2.4,4.7 8.8,12 10.4,12 0.6,0 1.9,1 3.1,2.2 1.2,1.3 4.8,4.5 8,7.3 9.9,8.5 12.6,16.3 12.6,36.1 0,13.1 -1.7,24.4 -4.5,30.9 -0.7,1.6 -1.6,5.6 -2,8.7 -0.6,4.8 -0.4,6.3 1.2,9.1 4.4,7.5 3.3,15.7 -1.4,10.4 -3.2,-3.5 -7.3,-13.6 -7.3,-17.9 0,-4.3 -2.5,-9.5 -5,-10.3 -0.8,-0.2 -6.4,-0.5 -12.4,-0.7 l -10.8,-0.3 -2.9,3.3 c -2.5,2.8 -2.9,4 -2.9,9.2 0,8.2 -1.8,15.6 -4.4,18.7 l -2.3,2.6 -0.7,-2.7 c -0.4,-1.5 -0.2,-4.4 0.4,-6.6 1.4,-5.2 -0.3,-16.3 -4,-25.5 -10,-25.3 -9.2,-22.3 -8.8,-34.7 0.3,-10.9 0.4,-11.6 4.5,-19.8 4,-8.2 8,-13.7 15.3,-20.7 3.3,-3.2 3.5,-3.8 3.4,-9.6 -0.1,-3.4 -0.9,-10.5 -1.8,-15.7 -2.3,-12.7 -1.7,-27.8 1.7,-42.9 1.4,-6.3 3.1,-12.7 3.8,-14.2 1.3,-3.2 3.8,-3.9 4.1,-1.2 z M 592,113.3 c 1.9,1.3 5.5,2.9 8,3.6 10.1,2.9 11.6,8.1 4.2,15.1 -5.5,5.2 -8.9,9.7 -12.2,16 -1.2,2.5 -2.7,5.4 -3.3,6.5 -0.6,1.1 -1.3,7.1 -1.5,13.3 -0.5,13.1 -1.1,13.8 -7.8,10.2 -4.9,-2.6 -14.2,-11 -17,-15.5 -2.5,-4.1 -5.4,-12.3 -5.4,-15.6 0,-1.5 -0.7,-4.3 -1.6,-6.4 -1.6,-4 -1.6,-9.6 0.2,-10.2 0.6,-0.2 2.7,0.8 4.8,2.2 2,1.4 4.5,2.5 5.4,2.5 0.9,0 4.9,-2.5 8.7,-5.6 3.9,-3.1 8.1,-6 9.4,-6.5 2.1,-0.8 2.3,-1.4 1.8,-5 -1,-7.3 0.5,-8.4 6.3,-4.6 z"
|
||||||
|
+ id="path12"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 623,151.5 c 0,1.4 0.6,2.5 1.3,2.5 2.1,0 2.7,-1.1 1.6,-3.1 -1.4,-2.7 -2.9,-2.3 -2.9,0.6 z"
|
||||||
|
+ id="path13"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 595,126 c 0,2.4 2.6,3.8 4.2,2.2 0.8,-0.8 0.8,-1.5 -0.2,-2.7 -1.8,-2.1 -4,-1.9 -4,0.5 z"
|
||||||
|
+ id="path14"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 581.8,138.1 c -3.1,1.7 -1.6,6.9 1.9,6.9 2.2,0 3.8,-4.6 2.3,-6.5 -1.5,-1.7 -1.9,-1.8 -4.2,-0.4 z"
|
||||||
|
+ id="path15"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 564.4,148.1 c -1,1.7 2.3,4.6 3.7,3.2 0.7,-0.7 0.9,-1.9 0.6,-2.7 -0.7,-1.8 -3.3,-2.1 -4.3,-0.5 z"
|
||||||
|
+ id="path16"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 421.9,45.3 c -1.3,1.2 -4,4 -5.9,6.3 -4.7,5.5 -7.9,6.4 -17.6,5.2 -11.7,-1.4 -15.4,-2.8 -20.3,-7.5 -4.6,-4.4 -9.1,-5.7 -10.8,-3.1 -1.4,2.3 -3.5,8.2 -4,11.6 -0.3,1.8 -1.6,5.2 -2.9,7.5 -1.4,2.3 -3,5.4 -3.6,6.9 -0.7,1.5 -2.5,3.2 -4,3.9 -3.6,1.5 -4,3 -2.8,12.2 1,8.2 3.9,14.5 8.4,18.5 8.1,6.9 9.5,20 7,62.4 -0.5,8.9 -0.4,12.1 0.6,13.3 1.9,2.3 4.6,1.8 6.8,-1.3 2,-2.6 2.3,-2.7 11.4,-2.6 10.6,0.1 13.8,1.3 13.8,4.9 0,3.9 4.1,3.3 7.4,-1 3.3,-4.3 5,-4.4 6.6,-0.4 1.8,4.2 7.9,7.3 11.7,5.8 3.9,-1.5 17.5,-2.1 19.3,-0.9 1.8,1.2 0.2,2.8 -10.9,10.5 -11.9,8.2 -18,13.4 -19.6,16.6 -1.5,2.8 -1.4,3.2 0.6,6 1.6,2.3 2.7,2.9 4.3,2.6 12.2,-3 13.8,-3.7 20.3,-8.7 6.2,-5 9.1,-7.7 18.8,-18.2 1.9,-2.1 4.5,-5.9 5.7,-8.5 2.1,-4.5 2.3,-6.1 2.3,-24.3 0,-11.9 -0.5,-21.3 -1.2,-24 -0.6,-2.5 -2.1,-8.8 -3.3,-14.1 -2,-9.1 -9.2,-28.5 -12.3,-33.2 -0.8,-1.3 -1.8,-4.2 -2.2,-6.6 -0.4,-2.4 -1.3,-5.8 -2,-7.6 -0.8,-1.7 -2.1,-6.2 -2.9,-9.9 -0.9,-3.7 -2.8,-8.9 -4.3,-11.4 -2.5,-4.5 -10,-13.2 -11.4,-13.2 -0.3,0 -1.7,1 -3,2.3 z m -44.1,10.2 5.1,5.6 15.4,0.2 c 17.1,0.2 18,-0.1 21.4,-6.8 2.8,-5.4 5.6,-5.9 9.2,-1.4 2.9,3.8 8.4,18.3 10,26.9 1.3,6.5 1.6,7.5 6.3,18 4,9 8.5,21.5 9.8,27 0.4,1.9 1.5,5.1 2.3,7.1 1.2,2.8 1.6,8.6 1.9,28.3 0.3,21.8 0.1,24.9 -1.3,25.9 -0.9,0.7 -1.9,2.1 -2.3,3.2 -1.2,3.7 -18.1,20.2 -23.6,23 -1.7,0.9 -3,1.9 -3,2.3 0,1.1 -8.7,3.5 -9.9,2.7 -0.6,-0.3 -1.1,-1.4 -1.1,-2.4 0,-1.8 1.4,-3 14,-12.3 9.2,-6.7 20,-16.9 20,-18.7 0,-2.6 -0.9,-3.1 -3.9,-1.9 -3.7,1.5 -28,2.1 -29.7,0.8 -2.1,-1.9 -0.5,-4 3.1,-4 1.9,0 3.7,-0.5 4.1,-1.1 0.4,-0.7 0.6,-5.8 0.5,-11.5 -0.1,-10.3 -0.1,-10.5 3.1,-14.9 3.4,-4.5 7,-6.5 11.8,-6.5 3.3,0 4.3,-0.9 2.9,-2.7 -1.7,-1.9 -7.3,-1.6 -12.3,0.7 -3.6,1.7 -4.7,3.1 -7.2,8.3 -2.5,5.3 -2.9,7.4 -2.9,14.7 0,4.7 -0.4,9.1 -0.8,9.7 -0.5,0.8 -2.9,1.3 -5.7,1.3 -3.8,0 -5.2,-0.4 -5.9,-1.8 -0.6,-1.1 -0.6,-2.3 -0.1,-2.8 1.1,-1.1 4.9,-22.4 4.2,-24.2 -0.2,-0.6 -1.3,-1.2 -2.3,-1.2 -2.1,0 -2.5,1.4 -3.3,11.5 -1.2,14.5 -3.3,22.1 -5.9,21.2 -1.5,-0.5 -1.1,-23.5 0.5,-25.4 0.7,-0.9 0.6,-2 -0.6,-3.8 -1.8,-2.7 -3.5,-3.3 -3.7,-1.3 -0.1,0.7 -0.2,6.6 -0.3,13.1 -0.1,12.8 -0.7,14.3 -5.6,13.2 -1.4,-0.4 -5.3,-0.9 -8.7,-1.2 -7.3,-0.6 -8.1,-2 -5.8,-9.7 2.1,-6.8 3,-17 1.7,-19.2 -0.9,-1.7 -1.1,-1.6 -1.7,1.1 -0.3,1.7 -1.1,4.6 -1.6,6.5 -0.6,1.9 -1.4,7.2 -1.8,11.8 -0.4,4.5 -1,8.5 -1.4,8.8 -2.1,2.2 -2.5,-2.6 -2,-27.9 0.7,-31.2 0.6,-31.8 -8,-41.5 -2.5,-2.8 -5.1,-6.1 -5.7,-7.3 -1.9,-3.5 -1.4,-12.5 0.9,-16.3 1.2,-1.8 2.1,-3.9 2.1,-4.6 0,-0.7 1.4,-3.2 3,-5.7 1.7,-2.4 3,-5.2 3,-6.2 0,-1 0.8,-3.8 1.9,-6.2 1,-2.4 2.1,-5.2 2.4,-6.2 1,-2.6 1.9,-2.1 7.5,3.8 z"
|
||||||
|
+ id="path17"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 411.5,77.1 c -1.3,4.1 4.7,7.7 7.5,4.4 1.8,-2.2 0.8,-5.1 -1.7,-4.7 -1.2,0.2 -2.4,-0.2 -2.8,-0.8 -1,-1.6 -2.3,-1.2 -3,1.1 z"
|
||||||
|
+ id="path18"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 365.2,79.7 c 0.4,3.3 4.4,5.8 6.5,4.1 3.2,-2.6 0.3,-6.8 -4.7,-6.8 -1.7,0 -2.1,0.5 -1.8,2.7 z"
|
||||||
|
+ id="path19"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 388,80.5 c -1.8,2.1 0.3,6.8 2.8,6.3 2.1,-0.4 2.8,-4.4 1.2,-6.4 -1.6,-1.8 -2.4,-1.8 -4,0.1 z"
|
||||||
|
+ id="path20"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 423.2,85.2 c -1.5,1.5 -1.6,4.4 -0.2,5.3 0.6,0.3 1.9,0.3 3.1,0 1.5,-0.5 1.9,-1.4 1.7,-3.3 -0.3,-2.9 -2.6,-4 -4.6,-2 z"
|
||||||
|
+ id="path21"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 736.6,148.9 c -6,6.6 -0.4,23.5 16.2,49.1 8,12.3 9.6,18 7.1,26 -3.6,12.1 -3.9,14 -3,22.8 0.5,4.8 1.6,10.7 2.4,13.2 2.5,7.5 3.8,12.8 5.2,22.2 1.1,7.2 1.9,9.7 4.2,12.6 4.4,5.3 6.5,6.5 8.9,4.8 1.7,-1.3 1.9,-2.8 1.9,-14.8 0.1,-16.3 0.2,-16.8 1.9,-16.8 1.6,0 4.6,5.8 4.6,9.1 0,1.2 0.7,4.7 1.6,7.8 3.6,12.4 5.6,15.1 10.3,13.6 2.6,-0.8 3.1,-3.9 2.9,-17 -0.1,-6.1 0.2,-12.1 0.6,-13.4 0.8,-2.4 0.9,-2.4 10.5,-1.5 5.3,0.4 16.5,0.8 25,0.9 h 15.4 l 1.8,3.5 c 1.1,1.9 2.2,5 2.5,7 0.4,1.9 1,3.9 1.4,4.5 0.4,0.5 1.3,3.5 1.9,6.5 1.6,7.5 4.4,12 7.6,12 2.3,0 6.41118,-0.0354 6.41118,-4.0354 0,-4 -4.11118,-4.6646 -6.31118,-4.2646 -3.2,0.6 -4.1,-1.2 -5.6,-11.2 -1.3,-8.7 -2.8,-12.7 -6,-16.5 l -2.2,-2.4 -27.8,-0.3 c -23.6,-0.3 -27.9,-0.1 -29,1.2 -0.9,1 -1.1,5.1 -0.9,14.5 0.3,9.2 0.1,13 -0.7,13 -1.9,0 -3.4,-2.4 -4.3,-7.1 -1.5,-7.1 -4.9,-18 -6.2,-19.5 -2,-2.4 -6.5,-1.7 -8.4,1.3 -1.5,2.2 -1.7,4.3 -1.3,13.7 0.5,12.1 0.3,13.6 -1.8,13.6 -2.3,0 -4.9,-8.2 -6,-18.5 -0.3,-3.9 -2,-11.5 -3.6,-17 -2.5,-8.5 -2.9,-11.2 -2.6,-18.2 0.2,-4.5 0.9,-8.7 1.5,-9.5 0.6,-0.7 1.8,-3.9 2.6,-7 1.3,-5 1.3,-6.4 0,-10.7 -0.8,-2.7 -2.1,-5.5 -2.9,-6.1 -0.7,-0.7 -1.4,-1.7 -1.4,-2.2 0,-0.6 -3.1,-6 -6.9,-12.2 -12.3,-20 -17.5,-34 -14.1,-38.1 2.9,-3.5 8.8,4.5 21.6,29.4 2.7,5.2 7,11.8 9.7,14.7 4.1,4.5 5.4,5.3 9.5,5.9 3.3,0.4 6.2,0.1 9.2,-1 5.4,-1.9 26,-4.1 45.9,-5 7.9,-0.4 15.4,-1 16.6,-1.5 2.4,-0.9 4.4,-4.3 7.7,-12.8 2.2,-5.9 5,-7 7,-2.7 3.25672,4.52695 4.88817,4.75784 4.15897,0.16291 C 870.85742,177.50246 865.7,171 863.4,171 c -1.2,0 -8.4,10.8 -8.4,12.7 0,1.5 -2.9,7 -4.3,8.1 -0.6,0.5 -10.4,1.2 -21.7,1.5 -11.3,0.4 -22.1,1.1 -24,1.6 -5.3,1.6 -22.1,3.8 -24.6,3.3 -1.2,-0.2 -3.5,-1.6 -5,-3.1 -3.3,-3.2 -5.6,-6.6 -14.3,-22.6 -7.9,-14.4 -13,-21.4 -17.2,-23.5 -4.7,-2.5 -5.2,-2.5 -7.3,-0.1 z"
|
||||||
|
+ id="path25"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1"
|
||||||
|
+ sodipodi:nodetypes="cccccccccsssccccccccccsscccccccsccccscccccccsccccccccccssscccccccc" /><path
|
||||||
|
+ d="M -2.015625,175.87812 C -5.7714471,175.45439 2.7,189.5 5.5,192.4 c 1.1,1.1 3.4,1.6 6.8,1.6 2.9,0 7.3,0.8 10,1.7 l 4.7,1.7 5.5,-5.4 c 3.9,-3.8 5.8,-5.1 6.6,-4.3 1.1,1.1 3.6,13.1 4.6,22.5 0.6,5.5 0.5,5.6 -2.6,7.2 -4,2.1 -4,4.8 0,6.3 l 3.1,1.2 -2.8,4.8 c -1.5,2.6 -6.5,8.3 -11,12.6 -4.6,4.3 -9.2,9.2 -10.3,11 -3.1,5 -3.5,11.9 -1.6,25.1 0.9,6.4 1.5,11.9 1.2,12.2 -1.7,1.7 -6.7,-5.8 -6.7,-10.2 0,-3.1 -3.3,-11.9 -5.3,-14.2 -2.5,-2.7 -3.9,-2.8 -6,-0.4 -1.4,1.6 -1.7,4.4 -1.7,18.5 0,16.7 0.7,19.7 3.2,14.1 0.9,-1.9 0.9,-3.9 0,-8.3 -1.7,-8 -1.5,-19.2 0.2,-21.6 1.4,-1.9 1.5,-1.9 2.4,0.5 2.5,6.6 3.5,9.9 4.2,14.2 1,5.4 2.9,9.3 6.5,13 5.7,6.1 8,2.4 7.1,-11.1 -0.4,-5.3 -1.2,-11.9 -1.8,-14.8 -1.7,-8.1 0.5,-12.6 11.9,-24 10.5,-10.6 11.6,-12.4 13.3,-20.9 1.8,-9.1 -1.9,-45.4 -4.6,-45.4 -0.9,0 -6.9,4.4 -10.4,7.6 l -3.5,3.2 -9.7,-0.5 -9.7,-0.6 -2.4,-3.6 c -1.3,-2 -3.4,-5.2 -4.5,-7.1 l -2.996875,-2.98437 z"
|
||||||
|
+ id="path26"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1"
|
||||||
|
+ sodipodi:nodetypes="scscccsccccccccsscssccccccccccssccccccs" /><path
|
||||||
|
+ d="m 862,200 c 0,1.7 -3.9,5 -6,5 -1.3,0 -2,0.7 -2,1.9 0,3 2.1,3.7 4.1,1.3 0.9,-1.2 2.2,-2.2 2.7,-2.2 0.5,0 2.1,-0.9 3.6,-2.1 2.1,-1.7 2.4,-2.4 1.5,-3.5 -1.3,-1.6 -3.9,-1.9 -3.9,-0.4 z"
|
||||||
|
+ id="path27"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 369.4,208.3 c -3.7,2.2 -9.4,6.9 -9.4,7.8 0,0.5 -2.5,5.1 -5.5,10.2 -3,5 -5.5,9.6 -5.5,10.2 0,0.5 -1.4,3 -3,5.5 -1.6,2.5 -3,5.2 -3,6 0,0.9 -2,3.7 -4.4,6.4 l -4.5,4.8 -9.8,-0.7 c -5.4,-0.4 -10.9,-1.2 -12.3,-1.7 -4.5,-1.8 -15.2,-2.9 -32.5,-3.5 -12.1,-0.3 -17.5,-0.9 -18.9,-1.9 -1.1,-0.7 -3.2,-4.8 -4.7,-8.9 -2.6,-7.1 -5.8,-11.4 -8.6,-11.5 -1.2,0 -10.3,13.6 -10.3,15.6 0,2.3 -6.6,4.4 -13.9,4.4 -6.8,0 -7.4,-0.2 -14.2,-4.7 -5.6,-3.7 -7.4,-4.5 -8.7,-3.6 -2.6,1.6 -2.9,3.3 -5.9,30.8 -1.3,12.2 2.6,22 12.6,31.3 2.5,2.4 5.9,5.6 7.4,7 1.5,1.5 3.7,4.6 4.9,6.9 1.8,3.7 2,5.4 1.6,15.7 -0.3,7.1 -0.9,12.1 -1.6,12.8 -1.8,1.8 -1.4,7 0.7,9.5 3.6,4.3 6.2,2.5 10.4,-6.7 1.4,-3 3,-7.8 3.7,-10.5 0.7,-2.8 1.9,-6.5 2.8,-8.3 1.1,-2.6 1.7,-3 2.8,-2.1 1.9,1.6 1.8,15.5 -0.1,18.9 -3.3,5.8 -0.7,14 4.5,14 1.5,0 3.2,-0.6 3.7,-1.3 1.5,-1.8 7,-18.5 7.8,-23.6 0.9,-5.7 5.5,-10.6 8.8,-9.7 5.8,1.7 16.7,1.8 27,0.2 11.8,-1.9 18.2,-1.5 19.7,1.3 0.5,1 0.7,5.6 0.4,10.2 -1,16.9 -0.9,17.5 2.1,19.5 2.5,1.6 2.7,1.6 4.9,-0.5 2.7,-2.5 6.1,-11.3 7.1,-18.3 0.6,-4.9 4.3,-11.4 6,-10.7 0.6,0.2 1,6.1 1,14.6 0,11.9 0.3,14.5 1.7,15.9 2.5,2.5 6.8,0.6 9.3,-4.2 1.1,-2.1 2.9,-8.4 3.8,-13.9 1,-5.5 2.7,-12.9 3.7,-16.5 1,-3.6 2.5,-9 3.4,-12.1 2.2,-7.8 2,-13.9 -0.9,-25.3 -1.4,-5.4 -2.5,-11 -2.5,-12.5 0,-1.6 4.1,-9.6 10.1,-19.6 10.4,-17.7 14.3,-25.9 15.8,-33.9 1,-5.6 -0.1,-11.5 -2.5,-13.3 -2.1,-1.6 -2.3,-1.6 -5,0 z m 3.4,11.7 c -0.6,5.5 -7.5,20.3 -16.5,34.8 -3.6,5.9 -7.4,12.5 -8.4,14.7 -2.3,5 -2.4,11.4 -0.3,16.3 1.1,2.4 1.8,7.7 2.2,14.9 0.4,11.2 0.2,12.8 -4.3,27.3 -0.7,2.5 -1.7,7.6 -2,11.5 -0.7,7.2 -3.6,15.5 -5.4,15.5 -2,0 -2.4,-2.6 -2.2,-15.7 0.2,-9.2 -0.2,-13.9 -1,-14.9 -1.2,-1.5 -5.6,-1.9 -7.6,-0.6 -1.7,1.1 -3.5,5.9 -4.4,11.7 -0.9,6.5 -4.2,15.8 -5.7,16.3 -1.3,0.4 -1.3,1 -1.4,-14.8 0,-6.3 -0.5,-12.3 -1,-13.3 -0.9,-1.7 -2.5,-1.8 -28.6,-1.1 -26.8,0.7 -27.8,0.8 -29.8,2.9 -3.1,3.4 -5.3,8.6 -6.4,15.6 -1.8,11.5 -2.4,13.4 -4.5,13.4 -1.9,0 -2,-0.8 -2,-13.8 0,-13.5 -0.1,-13.9 -2.5,-15.9 l -2.4,-2 -2.3,2.9 c -1.3,1.5 -2.9,3.5 -3.6,4.3 -0.8,0.8 -2.1,5.2 -3,9.8 -1.5,7.8 -2.9,11.2 -4.7,11.2 -1.8,0 -2,-5.9 -0.5,-14 0.8,-4.7 1.5,-10 1.5,-11.8 0,-4.7 -4.6,-13.6 -9.4,-18.2 -7.4,-7.1 -9.7,-9 -10.7,-9 -0.5,0 -0.9,-0.4 -0.9,-1 0,-0.5 -1.1,-2.6 -2.5,-4.7 -3.1,-4.5 -2.9,-7.4 0.8,-9.1 3.5,-1.7 3.4,-2.8 -0.2,-4.6 -1.6,-0.9 -3.1,-2.2 -3.5,-3.1 -0.3,-0.8 -0.1,-5.9 0.4,-11.3 0.5,-5.3 1,-10.7 1,-11.9 0,-1.2 0.8,-2.7 1.8,-3.2 1.4,-0.7 2.8,0 6.7,3.5 4,3.6 5.5,4.4 7.5,3.9 1.4,-0.3 6.5,-1.1 11.3,-1.8 l 8.8,-1.2 5,-7.8 c 2.7,-4.3 5.5,-7.7 6.1,-7.5 0.6,0.2 2.4,3.3 3.9,6.9 1.4,3.5 4,7.9 5.6,9.6 l 3,3.3 h 15.1 c 12.3,0 18.5,0.6 32.7,3 9.7,1.6 19,3 20.9,3 7.4,0 13.2,-5.6 20.9,-20.4 8.1,-15.2 13.4,-24 16.6,-27.5 2.7,-2.9 3.3,-3.1 4.7,-2 1.2,1 1.5,2.5 1.2,5.9 z"
|
||||||
|
+ id="path28"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 246.4,261.1 c -1,1.7 1.3,3.6 2.7,2.2 1.2,-1.2 0.4,-3.3 -1.1,-3.3 -0.5,0 -1.2,0.5 -1.6,1.1 z"
|
||||||
|
+ id="path29"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 255.4,267.2 c -0.9,1.5 2.7,4.1 3.9,2.9 1.3,-1.3 0.1,-4.1 -1.7,-4.1 -0.8,0 -1.8,0.5 -2.2,1.2 z"
|
||||||
|
+ id="path30"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 227,269.5 c -1,1.2 -1,1.8 0,3 2,2.5 5.5,1.5 5.5,-1.5 0,-3 -3.5,-4 -5.5,-1.5 z"
|
||||||
|
+ id="path31"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 205.3,270.6 c -0.8,2.1 1.3,4.2 2.8,2.7 1.3,-1.3 0.5,-4.3 -1.1,-4.3 -0.6,0 -1.3,0.7 -1.7,1.6 z"
|
||||||
|
+ id="path32"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 34.2,209.2 c -2,2 -1.4,4 1.1,3.6 1.4,-0.2 2.2,-1 2.2,-2.2 0,-2.4 -1.6,-3.1 -3.3,-1.4 z"
|
||||||
|
+ id="path33"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 12.6,209.9 c -0.4,0.7 -0.5,1.5 -0.2,1.8 0.9,0.9 1.9,-0.4 1.4,-1.8 -0.4,-1.1 -0.6,-1.1 -1.2,0 z"
|
||||||
|
+ id="path34"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 867.4,267.1 c -0.9,1.5 0.6,19.8 1.7,20.5 0.5,0.3 0.9,-4.2 0.9,-10.5 0,-10.2 -0.7,-13 -2.6,-10 z"
|
||||||
|
+ id="path35"
|
||||||
|
+ style="display:none;fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 496.3,275.2 c -1.3,0.6 -2.5,1.9 -2.9,3 -0.3,1 -1.7,3.6 -3.1,5.8 -2.8,4.3 -8.6,7.1 -17.3,8.5 -2.5,0.3 -5.9,1.1 -7.6,1.7 -2.8,1 -3.7,0.7 -8.5,-2.5 -6.1,-4 -13.1,-5.8 -14.5,-3.6 -0.5,0.8 -1.1,5 -1.5,9.4 -0.4,5.9 -1.3,9.5 -3.3,13.5 -2,4 -3,8 -3.6,14.5 -0.5,4.9 -1.2,10.7 -1.6,12.7 -0.6,3.5 -0.5,3.8 2.7,5.1 1.9,0.8 6.4,4.3 10,7.8 3.6,3.5 8.4,8 10.7,10 4.9,4.1 5.5,7.8 2,10.2 -1.3,0.8 -4.3,3.3 -6.8,5.5 -2.5,2.3 -5.6,4.4 -7,4.7 -3.8,1 -8.6,5 -10,8.5 -1.1,2.7 -1,3.3 0.5,5 3.5,3.9 9.4,2.1 20.7,-6.2 4,-3 9.3,-6.5 11.8,-7.9 2.5,-1.4 6.2,-3.5 8.3,-4.7 4.7,-2.7 4.7,-2.7 4.7,0.2 0,2.4 -4.9,7.6 -10.7,11.2 -4,2.6 -6.7,5.6 -8.2,9.2 -2.8,6.7 3,9.3 11.4,5.2 7.3,-3.6 20.7,-14.2 21.7,-17.2 0.3,-0.9 2.2,-0.5 7.5,1.6 l 7,2.8 11.8,-2.6 c 6.5,-1.4 13.9,-2.6 16.4,-2.6 5.5,0 22.9,-3.3 32.6,-6.1 7.2,-2.1 13.3,-4.9 17.3,-8 3.7,-2.8 9.9,-12 10.7,-15.9 0.4,-1.9 1.4,-4.8 2.2,-6.3 1.8,-3.5 1.4,-24.4 -0.6,-29.7 -7.2,-19.4 -17.6,-29.8 -33.4,-33.4 -11.1,-2.6 -18.7,-1.8 -35.2,3.6 -13.8,4.6 -15.6,4.6 -18.6,0.6 -1.3,-1.8 -3.3,-5.1 -4.4,-7.3 -3.7,-7.6 -6,-8.8 -11.2,-6.3 z m 8.4,10.8 c 4.7,9.4 6.2,10.5 13.3,10.4 3.3,-0.1 6.5,-0.6 7.2,-1.1 0.7,-0.5 4.5,-1.8 8.3,-2.8 3.9,-1 7.6,-2.3 8.4,-2.9 0.8,-0.7 5.9,-1.1 12.5,-1.1 8.6,0 11.8,0.4 14.1,1.7 1.7,0.9 4.7,2.4 6.7,3.3 6.1,2.7 13.7,11.9 17.1,20.5 2.6,6.8 2.9,8.6 2.9,19.5 0,13.7 -1.1,18.7 -5.2,24.8 -7.5,11.1 -20,17 -41,19.2 -3.6,0.4 -7.6,1.2 -9,1.7 -1.4,0.6 -5.9,1.2 -10,1.4 -4.1,0.3 -9.8,1.1 -12.7,1.9 -6.4,1.9 -9.2,1.9 -13.4,0 -6.9,-3 -8.3,-4.7 -8.1,-10.6 0.1,-4.3 0.5,-5.7 2.4,-7.1 1.3,-1 2.8,-1.8 3.5,-1.8 1.4,0 2.8,6.3 1.9,7.9 -1,1.5 3.1,5.1 5.8,5.1 1.3,0 5.2,-0.9 8.7,-2.1 3.5,-1.1 12.5,-2.7 19.9,-3.4 17.2,-1.6 27.3,-4.4 31.7,-8.7 1.8,-1.8 3.3,-3.6 3.3,-4 0,-1.4 -3.3,-0.9 -5.1,0.8 -1.8,1.6 -5.8,2.9 -13.9,4.4 -2.5,0.4 -6.4,1.6 -8.6,2.5 -2.6,1 -6.2,1.5 -9.9,1.3 l -5.8,-0.3 -1.9,-5.5 c -1.3,-3.7 -1.9,-8.6 -2,-15 -0.1,-8.3 0.2,-10.2 2.5,-15 2.7,-5.8 6.7,-10.7 11.3,-13.7 4.8,-3.1 13.2,-5.2 18.5,-4.6 4.2,0.5 4.9,0.3 4.9,-1.1 0,-3.1 -5.7,-4.5 -13,-3.3 -3.6,0.5 -7.2,1.6 -8.1,2.3 -0.8,0.8 -2.1,1.4 -2.7,1.4 -1.7,0 -13,11.9 -14.7,15.5 -4.6,9.5 -6,22.6 -3.1,28.3 0.7,1.5 1.6,4.6 2,6.9 0.5,3.8 0.3,4.4 -1.9,5.9 -3.4,2.2 -10.6,3.5 -12.2,2.2 -0.7,-0.6 -1.3,-2.9 -1.3,-5.2 0,-4.5 -2.2,-8.6 -4.7,-8.6 -0.8,0 -3.2,1.4 -5.3,3 -4.4,3.5 -5.5,6.8 -5.1,15.2 0.3,6.2 0.3,6.2 -8.6,13.8 -6,5 -16.1,11.2 -17.3,10.5 -2.5,-1.6 -0.6,-4.8 6.3,-10.4 10.4,-8.6 17.3,-17.9 15,-20.2 -0.9,-0.9 -1.6,-0.9 -2.5,-0.2 -0.7,0.6 -3,1.3 -5.1,1.6 -2.1,0.3 -6.4,2.3 -9.5,4.3 -3.1,2.1 -7.6,4.8 -10.1,6.2 -2.5,1.3 -6.1,3.6 -8.1,5.1 -5.7,4.5 -9.7,6.4 -11.5,5.8 -2.4,-1 -1.4,-4 2,-5.8 6.6,-3.4 10.4,-6.2 20.7,-15.3 3.2,-2.8 1.3,-7.4 -5.5,-13.9 -3.4,-3.2 -7.9,-7 -9.9,-8.4 -2.1,-1.4 -3.8,-3.2 -3.8,-3.9 0,-0.7 -0.6,-1.7 -1.4,-2.1 -2.8,-1.7 -5,-7.7 -5,-14.3 -0.1,-6.9 2.1,-14.3 5.7,-19.2 1.6,-2.2 1.9,-3.7 1.4,-8 -0.9,-9.4 1.8,-10.7 9.5,-4.7 5.3,4.2 8.2,4.5 16.8,1.5 4,-1.4 8.6,-2.6 10,-2.6 5.8,0 9,-2 11.7,-7.4 3,-6 5.2,-8.8 6.7,-8.3 0.6,0.2 2.5,3.2 4.3,6.7 z"
|
||||||
|
+ id="path36"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 504.9,311.9 c -1.8,1.4 -2.8,1.7 -4.2,0.9 -2.6,-1.4 -4.5,0.5 -2.7,2.7 2.8,3.4 4.7,3.6 7.9,0.9 4.7,-3.9 3.7,-8.3 -1,-4.5 z"
|
||||||
|
+ id="path37"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 519.8,312.6 c -1.5,3.3 0,5.9 3.3,5.9 2.8,0 3.7,-3.1 1.9,-6.4 -1.5,-2.9 -3.8,-2.6 -5.2,0.5 z"
|
||||||
|
+ id="path38"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 477.4,321.4 c -0.9,2.4 0.3,4.7 2.1,4 1.8,-0.7 1.6,-4.5 -0.2,-5.2 -0.7,-0.2 -1.6,0.3 -1.9,1.2 z"
|
||||||
|
+ id="path39"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 450.8,321.7 c -5.8,0.5 -6.3,2.2 -1.4,5.2 4.3,2.7 5.5,2.6 8.9,-0.5 3.3,-2.8 3,-5.5 -0.5,-5.2 -1.3,0.1 -4.4,0.3 -7,0.5 z"
|
||||||
|
+ id="path40"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 129,284 -4.4,5 h -7 c -3.9,0.1 -9.1,0.5 -11.6,1.1 -11.8,2.5 -11.6,2.6 -16.8,-2.3 -5.8,-5.4 -10.4,-7.5 -14,-6.2 -3.1,1.1 -3.5,2.6 -5.2,19.9 -1,9.8 -1.5,12.2 -3.1,13.3 -2.3,1.6 -2.4,4.3 -0.4,8.2 1.2,2.4 1.5,6.2 1.2,19.5 -0.2,9.1 -0.6,16.7 -0.9,17 -0.3,0.3 -2.5,1.6 -4.9,2.8 -3,1.5 -5.3,3.8 -7.4,7.2 -2.8,4.7 -3,5.7 -3,14.5 0.1,9.2 0.2,9.8 3.9,16.3 2.1,3.8 5.2,8.4 6.9,10.4 2.9,3.3 3.2,4.3 3.2,10.2 v 6.6 l 6,0.3 c 3.3,0.2 6.4,0.7 6.9,1.3 1.7,1.6 3.7,1 6.6,-2.1 l 2.8,-3 16.9,0.1 c 9.2,0 19.1,-0.3 22,-0.6 5.1,-0.7 5.3,-0.7 9.4,3.4 2.3,2.2 4.5,4.1 4.8,4.1 0.3,0 2.4,-1.2 4.6,-2.5 2.2,-1.4 5.2,-2.5 6.7,-2.5 2.2,0 3.4,-1 6.1,-5.3 1.9,-2.8 4.9,-6.6 6.7,-8.2 1.8,-1.7 4.3,-4.6 5.6,-6.5 1.3,-1.9 4,-5.5 5.8,-8 1.9,-2.5 3.5,-4.8 3.5,-5.2 0.1,-0.4 2,-4 4.4,-8 4,-6.9 7.7,-15.9 7.7,-19.1 0,-1.1 -2.5,-7.1 -3.5,-8.5 -0.1,-0.1 -1.3,0.2 -2.6,0.7 -4.2,1.5 -8.8,6.7 -11.4,12.5 -1.4,3.1 -2.9,5.6 -3.5,5.6 -0.5,0 -1,-0.4 -1,-0.8 0,-0.5 -1.4,-3 -3.1,-5.6 -3.1,-4.7 -9.4,-9.6 -12.3,-9.6 -4.1,0 -3,-10.2 1.9,-18.3 5.1,-8.5 6.1,-13.2 4.1,-20.1 -1.1,-3.5 -1.4,-7 -1,-9.2 0.6,-3.3 0.3,-3.9 -4.9,-8.9 -4.9,-4.8 -12.7,-16.1 -12.7,-18.4 0,-0.5 -0.9,-2 -2.1,-3.5 -3.1,-3.9 -5.9,-3.3 -10.9,2.4 z m 11.3,7.5 c 2,4.1 4.1,7.5 4.7,7.5 0.5,0 1,0.4 1,1 0,0.5 1.5,3.1 3.4,5.7 3.7,5.2 6.6,15.1 6.6,22.4 0,2.9 -0.9,6 -2.5,8.9 -5.5,9.7 -5.9,11.1 -6.2,23.6 -0.1,6.6 -0.7,17 -1.3,23 -0.6,6 -1.3,17 -1.6,24.4 -0.5,12.6 -1.6,18 -3.6,18 -1.8,0 -2.6,-5 -3.2,-19.8 -0.4,-8.5 -1,-16 -1.3,-16.8 -0.8,-2.3 -3.2,-1.6 -3.9,1.1 -0.7,2.7 0,18.5 1,22.5 1.2,4.5 -0.4,5.4 -10.6,5.6 -5.1,0.1 -15,0.4 -22,0.8 -9.6,0.4 -12.9,0.2 -13,-0.7 -0.1,-0.7 -0.2,-7.8 -0.3,-15.9 0,-14.5 -0.5,-17.2 -2.7,-15 -0.8,0.8 -1.1,5.9 -0.9,16.6 0.3,16.8 -0.4,20 -4.2,19.4 -2.1,-0.3 -2.2,-0.8 -2.7,-16.3 -0.3,-8.8 -0.9,-16.5 -1.2,-17.1 -0.4,-0.6 -1.4,-8 -2.2,-16.5 -2.4,-25.2 -0.5,-78.4 3,-85.1 l 1.5,-2.9 3.7,2.3 c 2,1.2 4.6,3.4 5.8,4.7 2.3,2.7 4.1,2.9 27.1,2.3 l 11.2,-0.2 4.1,-5.5 c 2.2,-3 4.6,-5.5 5.3,-5.5 0.7,0 2.9,3.4 5,7.5 z m 47.1,73.1 c 0.4,1 -0.1,3.8 -1.1,6.3 -2,5.3 -9,18.8 -11,21 -0.8,0.9 -3.6,5.1 -6.4,9.4 -2.7,4.3 -5.6,8 -6.5,8.4 -0.8,0.3 -2,1.7 -2.5,3 -0.9,2.6 -2.9,2.3 -2.9,-0.4 0,-0.9 2,-5.2 4.4,-9.7 2.4,-4.5 6.7,-12.6 9.6,-18.1 10.1,-19.2 14.6,-24.7 16.4,-19.9 z m -28.3,2.7 c 4.9,4.4 7.3,8.6 7.1,12.3 -0.3,3.5 -6.2,18.5 -11.1,27.9 -2.1,4.2 -3.1,7.4 -3.1,10.7 0,2.6 -0.5,5 -1.1,5.3 -1.6,1 -2.1,0.1 -2.3,-4.2 -0.1,-2.1 -0.5,-4.3 -0.8,-4.9 -0.9,-1.3 1.8,-29.8 3.2,-34.4 0.5,-1.9 1,-6 1,-9.1 0,-8.1 1.3,-8.8 7.1,-3.6 z m -91.7,-0.1 c 1.7,2.7 3.1,10.9 4.6,26.9 1.8,20.3 1.2,23.1 -3.7,17.6 C 65.7,408.8 59,398.3 59,397 c 0,-0.6 -0.4,-1.8 -0.9,-2.8 -0.5,-0.9 -1.4,-4.2 -2.1,-7.3 -0.9,-5 -0.8,-6.3 0.9,-10.9 1.9,-4.9 6.4,-11 8.3,-11 0.4,0 1.4,1 2.2,2.2 z"
|
||||||
|
+ id="path41"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 134,305.9 c -1.4,2.7 -1.3,5.8 0.3,6.4 0.6,0.2 2.7,0.2 4.5,0 2.5,-0.4 3.2,-1 3.2,-2.8 0,-4.8 -5.9,-7.4 -8,-3.6 z"
|
||||||
|
+ id="path42"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 82.2,308.3 c -1.9,2.3 -2.4,6.3 -0.9,7.5 1.1,1 1.7,0.9 2.7,-0.3 0.9,-1.1 2.3,-1.3 5.1,-0.9 3.2,0.5 3.9,0.4 3.9,-1 0,-2.4 -4.8,-6.6 -7.5,-6.6 -1.3,0 -2.7,0.6 -3.3,1.3 z"
|
||||||
|
+ id="path43"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 112.2,312.2 c 0.3,2.5 3.4,3.6 5.1,1.9 1.4,-1.4 -0.9,-4.1 -3.5,-4.1 -1.4,0 -1.9,0.6 -1.6,2.2 z"
|
||||||
|
+ id="path44"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 771.2,356.7 c -1.7,0.6 -4.5,6.4 -7.2,14.4 -1.5,4.3 -3.4,7.7 -6.2,10.6 -3.9,4 -4.1,4.3 -3.5,9.5 0.5,5.8 -1,10.1 -4,11.2 -0.9,0.4 -9.8,0.6 -19.7,0.5 -10,0 -24,0.2 -31.2,0.6 l -13,0.8 -2.2,-2.8 C 683,400 682,398 682,397 c 0,-2.9 4.3,-5.9 11,-7.6 11.2,-2.8 17.1,-7 18.6,-13.1 0.8,-2.9 -0.9,-7.1 -3.2,-8 -1.7,-0.6 -8.7,1.3 -12.1,3.3 -1.2,0.8 -5.5,1.9 -9.5,2.5 -8.1,1.2 -11.6,3 -16.9,8.6 -7.3,7.7 -8.4,16 -3.3,25.2 2.8,5 3,9.1 0.9,15.1 -1.2,3.4 -1.5,10.4 -1.5,36.9 v 32.6 l 2.5,3.8 c 3.4,4.8 6.7,5 9.5,0.4 1.1,-1.7 2,-4.2 2,-5.3 0,-1.2 0.7,-3.8 1.5,-5.7 0.8,-2 1.5,-4.8 1.5,-6.2 0,-2.9 3.6,-10.5 4.9,-10.5 1.3,0 3.9,7.7 5,14.6 1,6.8 3.7,12.9 7,15.8 4.4,4 10.8,-1.3 8.3,-6.9 -1.4,-3.1 -2.7,-17.4 -1.8,-20.8 l 0.6,-2.5 h 25.3 c 21.5,0.1 25.7,-0.2 27.8,-1.5 3.3,-2.2 9.8,-3.1 13.1,-1.8 2.7,1 5.8,6.4 5.8,10.2 0,2.6 4.8,16.9 6.6,19.6 1,1.7 2.4,2.3 4.9,2.3 4.5,0 4.8,-1.4 3.6,-15.1 -1.1,-12.5 -0.4,-17.3 2.5,-17.7 3.8,-0.5 7.4,4.9 10,15 1.9,7.1 3.2,10 5.6,12.5 3.5,3.6 8.1,4.5 9.2,1.7 1,-2.7 0.7,-9.9 -0.8,-14.5 -2.7,-8.4 -4.9,-26.8 -4.3,-35.1 0.7,-8.9 3.9,-17.4 6.9,-18.4 1.1,-0.3 4.8,-3.3 8.2,-6.5 4.5,-4.2 6.6,-7.1 7.5,-10.1 0.7,-2.4 1.7,-5.3 2.2,-6.6 1.6,-4.1 1.1,-7.2 -1.4,-8.3 -2.6,-1.2 -6.9,-12.4 -7.3,-19 -0.3,-5.3 -4.5,-13.9 -6.8,-13.9 -1,0 -4.3,2.5 -7.3,5.6 l -5.6,5.6 -5.1,-0.6 c -2.8,-0.4 -8.1,-1.1 -11.7,-1.5 -8,-1 -12.1,-3.2 -15.6,-8.6 -4.1,-6.1 -5.7,-7.2 -9.1,-5.8 z m 7.3,11.3 c 5.3,6.6 8.8,7.8 23.9,8.6 l 12.5,0.7 4.2,-4.1 c 5.7,-5.8 7.9,-5.3 7.9,1.6 0,3.1 1.6,8.3 4.1,13.7 2.9,6.2 4.2,14.7 2.9,19.5 -1.1,4 -6.1,9.6 -11.8,13 -4.1,2.5 -8,7.6 -9.1,11.8 -1.3,4.7 -0.7,31.7 0.9,39.7 0.7,3.3 2.1,8.1 3.2,10.7 2,4.6 1.9,7.8 -0.1,7.8 -1.5,0 -4.7,-6 -7.1,-13.5 -3.6,-11.3 -3.9,-12 -7,-13.8 -4.1,-2.4 -11.9,-3.4 -13.1,-1.6 -1.5,2.3 -1,15.7 0.8,22.5 1.2,4.5 1.4,6.7 0.6,7.5 -1.4,1.4 -4.3,-1.5 -4.3,-4.4 -0.1,-1.2 -0.7,-3.3 -1.5,-4.7 -0.8,-1.4 -1.4,-3.7 -1.5,-5.1 0,-3.9 -2.8,-11 -5.2,-13.6 -1.8,-1.9 -3.2,-2.3 -8.7,-2.3 -3.6,0 -10.4,0.5 -15.1,1.2 -4.7,0.6 -18,1.2 -29.6,1.2 -16.6,0.1 -21.5,0.4 -22.8,1.5 -1.4,1.2 -1.6,2.7 -1.2,9.3 0.4,4.4 1.1,8.8 1.6,9.8 1.2,2.3 1.3,10.7 0.1,11.4 -1.7,1.1 -4.2,-4.5 -6.1,-13.6 -2.1,-10.1 -5.7,-18.1 -8.4,-18.6 -3.4,-0.7 -6.8,4.3 -9.5,14.3 -0.6,2.2 -1.8,6.6 -2.7,9.7 -1.6,6.1 -3.9,7.7 -4.9,3.5 -0.3,-1.2 -0.5,-7.6 -0.3,-14.2 0.1,-6.6 0.1,-19 -0.1,-27.5 -0.2,-9.8 0.1,-17.8 0.9,-21.8 1.5,-7.6 0.8,-19.5 -1.4,-23.7 -2.3,-4.3 -2.1,-12 0.4,-16 3.9,-6.3 17.2,-12.5 26.6,-12.5 1.7,0 3.7,-0.7 4.4,-1.5 1.8,-2.1 5,-1.9 5,0.3 0,3.3 -6.1,8.1 -11.8,9.2 -5,0.9 -10.8,3.5 -14.6,6.4 -2.6,2.1 -3.3,9.4 -1.2,13.4 2.1,4 7.6,5.6 15.9,4.7 3.2,-0.4 17.6,-0.8 31.9,-0.9 l 26,-0.1 2.3,-2.7 c 2.4,-2.7 5.5,-11.8 5.5,-15.8 0,-1.2 1.1,-4 2.5,-6.4 1.3,-2.3 3.1,-6 3.9,-8.1 2.9,-8.1 4.7,-11.5 5.9,-11.5 0.6,0.1 3,2.3 5.2,5 z"
|
||||||
|
+ id="path45"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 775.5,387 c -0.4,0.7 -0.3,1.6 0.3,2.2 1.4,1.4 4.5,0.2 4,-1.5 -0.6,-1.6 -3.4,-2.1 -4.3,-0.7 z"
|
||||||
|
+ id="path46"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 821.3,388.7 c -0.7,0.3 -1.3,1.6 -1.3,2.9 0,1.9 0.5,2.4 2.5,2.4 1.8,0 2.5,-0.5 2.5,-1.9 0,-2.2 -2,-4 -3.7,-3.4 z"
|
||||||
|
+ id="path47"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 795.7,390.2 c -0.6,1.8 2.1,6.8 3.6,6.8 1.7,-0.1 4.7,-2.5 4.7,-3.9 0,-0.7 -1.6,-1.9 -3.5,-2.7 -4.2,-1.7 -4.2,-1.7 -4.8,-0.2 z"
|
||||||
|
+ id="path48"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 220.4,467.7 c -1.6,2.1 -3.5,5 -4.3,6.4 -2.1,4.3 -6.2,6.6 -14.7,8.4 -12.2,2.7 -15.2,2.5 -20.9,-1.3 -4.9,-3.3 -11.7,-4.4 -13,-2.1 -0.4,0.6 -0.9,4.7 -1.2,9.2 -0.4,6.3 -1.2,9.7 -3.5,14.5 -2.3,5 -3.1,8.2 -3.4,14.3 -0.2,4.4 -0.9,8.9 -1.4,10 -1.6,2.9 -0.4,5.3 3.8,7.7 2.1,1.1 6.3,4.5 9.3,7.4 3,2.9 7.6,7 10.2,9.1 7,5.6 6.6,8.1 -2,14.4 -3.8,2.7 -8.2,5.5 -9.9,6.2 -1.7,0.6 -4.5,2.5 -6.3,4.2 -2.7,2.4 -3.2,3.5 -2.9,6.6 l 0.3,3.8 5.8,-0.1 c 4.2,-0.1 6.4,-0.7 8,-2.1 3.8,-3.4 15,-10.9 19.2,-12.8 2.2,-1 5.4,-2.9 7.2,-4.2 3.7,-2.8 5.9,-2.3 4.2,0.9 -0.6,1.1 -3.8,4.5 -7.2,7.6 -10.8,10 -10.7,9.9 -10.7,13.5 0,1.9 0.6,4 1.4,4.6 2.2,1.9 8.4,0.2 13.7,-3.6 2.5,-1.8 5.1,-3.3 5.6,-3.3 0.6,0 3.6,-2.6 6.7,-5.7 l 5.6,-5.7 5.3,1.7 c 3,0.9 7.1,1.7 9.1,1.7 4.8,0 17.7,-2 19.6,-3 0.9,-0.5 6.3,-1.3 12,-1.9 25.9,-2.8 39.8,-7.3 48.7,-16 8.7,-8.5 11.8,-18.5 11,-35.6 -0.8,-15.9 -3.5,-23.2 -12.9,-34.6 -4.8,-5.9 -15.9,-11.8 -24.3,-13 -8.7,-1.2 -22.2,0.6 -34.6,4.7 -5.8,2 -11.6,3.4 -12.9,3.2 -1.6,-0.2 -3.2,-2.2 -5.7,-6.8 -7.3,-13.5 -9.7,-14.9 -14.9,-8.3 z m 9.8,8.9 c 5.2,10.6 10.4,13.5 18.1,10 1.8,-0.8 6.8,-2.4 11.2,-3.6 4.4,-1.2 8.8,-2.6 9.7,-3.1 1,-0.5 6,-0.9 11.1,-0.9 8.5,0 9.8,0.3 16.6,3.5 7.7,3.7 15.5,10.8 18.5,16.9 2.1,4.4 6.3,18.2 7.1,23.8 0.7,4.5 -0.3,8.5 -5.2,22.5 -1.8,5.1 -8.8,12.2 -14.8,15.2 -6.8,3.4 -17.3,6.3 -24.5,6.8 -3.6,0.3 -7,0.9 -7.7,1.5 -0.6,0.5 -5.8,1.4 -11.5,1.9 -5.7,0.6 -12.5,1.7 -15.1,2.5 -5.7,1.9 -15.1,1.1 -18.3,-1.4 -2.3,-2 -4.4,-7.2 -4.4,-11.2 0,-3 4,-8 6.5,-8 1.1,0 1.5,1.2 1.5,5 0,8.1 5.6,11.3 12.8,7.6 3.3,-1.7 10.8,-3.1 24.7,-4.7 5.5,-0.6 12,-1.7 14.5,-2.4 2.5,-0.7 5.6,-1.6 7,-1.9 1.4,-0.3 4.4,-2.1 6.5,-4 3.6,-3.1 3.8,-3.5 2.1,-4.2 -1,-0.4 -2.6,-0.2 -3.5,0.4 -4,2.9 -9.8,5.2 -12.8,5.2 -1.8,0 -5,0.6 -7,1.4 -4.9,1.8 -15.1,2.8 -17.3,1.6 -2.9,-1.5 -5.2,-10.6 -5.4,-20.5 -0.1,-7.8 0.3,-9.7 2.4,-14 1.4,-2.7 4.4,-6.9 6.8,-9.3 2.3,-2.3 4.2,-4.6 4.2,-5.1 0,-1.4 13.8,-4.3 18.8,-3.9 4,0.2 4.7,0 5,-1.6 0.7,-3.3 -2.3,-4.5 -9.6,-3.9 -13.1,1.1 -25.5,11.3 -30.4,25.1 -3.3,9.2 -3.4,13.6 -0.8,22 1.1,3.5 2,7.7 2,9.3 0,2.6 -0.6,3.2 -4.7,4.9 -2.7,1.1 -5.6,2.4 -6.5,3 -2.8,1.6 -4.9,-1.4 -4.3,-6 0.5,-4.3 -2.3,-9 -5.5,-9 -1,0 -4.2,2.2 -7.1,5 -3,2.7 -6.4,5 -7.5,5 -1.2,0 -2.7,0.7 -3.4,1.5 -0.7,0.8 -2.5,1.5 -4,1.5 -1.6,0 -6,2.2 -11.1,5.6 -4.6,3.1 -9.1,5.9 -9.9,6.2 -0.8,0.3 -4.5,2.5 -8.3,4.9 -6.9,4.4 -10.7,5.4 -10.7,2.8 0,-0.8 1.2,-2.2 2.8,-3.2 1.5,-0.9 3.2,-2.1 3.7,-2.7 0.6,-0.6 2.8,-2 5,-3.1 4.7,-2.4 13.5,-10.7 13.5,-12.8 0,-4 -3.4,-8.9 -10.2,-14.5 -12.2,-10 -16.6,-16.3 -17.3,-24.7 -0.3,-3.5 2.8,-13.9 5.3,-17.5 1.1,-1.6 1.9,-5.3 2.2,-10.5 0.7,-10.6 1.6,-10.7 13.7,-1.9 2,1.4 2.9,1.4 7.5,0.4 2.9,-0.7 6.2,-1.9 7.2,-2.6 1.1,-0.7 4.7,-1.6 8,-2 5.2,-0.6 6.6,-1.2 9.4,-4.2 1.8,-1.9 4.2,-5.2 5.3,-7.3 1,-2.1 2.6,-3.9 3.4,-3.9 0.8,0 2.9,2.9 4.7,6.6 z M 218,568.4 c -0.1,5 -0.8,6 -9,12.3 -11.5,8.7 -19,12.3 -19,9 0,-0.7 4.4,-5.7 9.8,-11.2 5.3,-5.5 11,-11.5 12.5,-13.3 3.6,-4.2 5.7,-3 5.7,3.2 z"
|
||||||
|
+ id="path49"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 230.6,501.5 c -1.1,0.8 -3.3,1.5 -4.8,1.5 -1.7,0 -3.1,0.7 -3.5,1.5 -0.7,1.9 2.3,4.4 5.3,4.5 2.7,0 7.8,-5.4 7.1,-7.4 -0.8,-2 -1.6,-2 -4.1,-0.1 z"
|
||||||
|
+ id="path50"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 246.1,502.4 c -1.9,2.3 -1,6.1 1.4,6.1 1.6,0 2,-0.7 2,-3.4 0,-3.8 -1.5,-5 -3.4,-2.7 z"
|
||||||
|
+ id="path51"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 201.3,511.6 c -0.8,2.1 2.8,5.7 5,4.8 1.8,-0.7 3.1,-3.9 2.2,-5.4 -1,-1.6 -6.5,-1.2 -7.2,0.6 z"
|
||||||
|
+ id="path52"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 173,513.5 c -1.6,1.9 2.8,5.5 6.7,5.5 2.2,0 6.1,-3 6.5,-5 0.2,-1.2 -0.9,-1.5 -6,-1.5 -3.5,0 -6.7,0.5 -7.2,1 z"
|
||||||
|
+ id="path53"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 524.5,489.3 c -0.8,1.8 -2.4,6.3 -3.5,10.2 -2.8,9.5 -8.1,18.9 -10.8,19.3 -3.6,0.5 -4.4,3.4 -3.1,10.9 0.6,3.8 1.5,7.6 2,8.5 0.5,1 0.9,2.4 0.9,3.1 0,0.8 2.3,4 5,7.1 8.6,9.8 8.2,7.9 8.3,43.5 0,17.4 0.4,32.4 0.9,33.3 1.3,2.6 3.1,2.2 5.7,-1.2 l 2.2,-3.1 10.2,0.5 c 8.3,0.4 10.4,0.8 11.2,2.2 0.6,0.9 1.8,2.6 2.8,3.6 2.2,2.4 5.4,0.9 6.8,-3.2 1.7,-4.7 3.4,-4.3 7.6,1.7 l 3.8,5.5 6,-0.6 c 3.3,-0.4 9.1,-0.9 12.8,-1.3 6.8,-0.6 6.9,-0.5 6.5,1.7 -0.3,2.2 -7.6,8 -21.5,16.9 -4.6,2.9 -10.2,9.6 -10.3,12.2 0,2.2 4.2,5.9 6.8,5.9 2.9,0 13,-3.8 16.7,-6.3 6.1,-4.2 22.8,-21.4 26.3,-27.2 l 3.7,-6 V 605 c 0,-17.5 -0.4,-23 -1.9,-29.5 -2.6,-11.1 -8.1,-27.7 -12.1,-36 -3.1,-6.6 -4.8,-11.6 -6.6,-19.5 -1.2,-5.4 -5.4,-17 -7.7,-21.5 -3.1,-6.2 -8.4,-11.5 -11.2,-11.5 -2.4,0 -6.2,3.7 -8.8,8.7 -1.9,3.6 -6.5,4.4 -18.9,3.4 l -11.2,-0.9 -5.7,-5.1 c -3.1,-2.7 -7,-5.5 -8.6,-6 -2.7,-0.9 -3,-0.8 -4.3,2.2 z m 60.9,5.8 c 4.6,5.4 7,11.4 11.1,27.9 1.8,7.1 5.5,16.9 9,24 1.2,2.5 3.8,9.7 5.8,16 4.1,13.2 5.7,26.4 5.8,47.6 0.1,12.5 -0.1,14.5 -2.1,18.5 -2.7,5.5 -21.6,24 -28.5,28 -5.2,3 -10.8,3.8 -12.1,1.7 -0.9,-1.3 1.8,-3.7 15.3,-13.6 11.6,-8.4 19.5,-16 19.1,-18.2 -0.3,-1.2 -2.2,-1.5 -11.3,-1.5 -6.1,0 -12.9,0.3 -15.2,0.8 -3.3,0.5 -4.5,0.3 -5.8,-1 -1.6,-1.6 -1.6,-1.7 0.1,-3 1,-0.7 2.6,-1.3 3.6,-1.3 2.8,0 3.8,-3.2 3.7,-12.6 0,-4.9 0.4,-10 0.9,-11.4 1.2,-3.1 7.7,-9.9 10.6,-11 1.8,-0.7 1.5,-0.9 -1.4,-0.9 -9.7,0.1 -15.4,10.4 -15.5,27.9 v 5.5 h -6 c -5.5,0 -6,-0.2 -6.3,-2.3 -0.2,-1.2 0.6,-4.6 1.7,-7.6 2.5,-6.8 3.2,-17.1 1.2,-17.1 -1.7,0 -2.6,2.8 -4.5,14.5 -1.8,10.5 -3.9,16.5 -5.7,16.5 -1.6,0 -1.6,-2.3 0,-17.4 1.1,-9.4 1,-10.6 -0.5,-12.3 -2.9,-3.1 -3.7,-0.6 -3.8,12.2 -0.1,9.1 -0.5,12.3 -1.6,13 -1.8,1.1 -11.6,0 -15.8,-1.7 -2.8,-1.2 -3.3,-1.8 -2.8,-3.7 0.6,-2.4 2.1,-12.4 3.3,-20.9 0.5,-4.3 0.4,-4.7 -1.4,-4.7 -2.3,0 -3.3,3.3 -3.3,11.1 0,2.7 -0.4,4.9 -0.9,4.9 -0.4,0 -1.1,2.6 -1.5,5.7 -0.8,7.2 -1.9,9.4 -3.4,6.6 -0.8,-1.4 -0.8,-4.2 0,-9.4 0.6,-4.1 1.2,-15.7 1.2,-25.9 0.1,-18.3 0.1,-18.6 -2.7,-24.5 -1.5,-3.3 -4.1,-7.4 -5.6,-9 -9.2,-9.9 -9.4,-13.9 -1.5,-30.3 3,-6.4 6.1,-13.9 6.8,-16.7 2,-7.5 3.6,-7.9 9.3,-2.2 2.8,2.8 6.2,5.1 8.2,5.6 6.2,1.6 27.9,2.2 29.1,0.8 0.6,-0.7 2.9,-3.6 5.2,-6.5 2.3,-2.8 4.5,-5.2 4.9,-5.2 0.4,0 1.9,1.4 3.3,3.1 z"
|
||||||
|
+ id="path54"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 568.5,517.8 c -2.2,2.2 1.3,8.2 4.8,8.2 1.9,0 5.1,-5.5 4.3,-7.5 -0.5,-1.3 -7.9,-1.9 -9.1,-0.7 z"
|
||||||
|
+ id="path55"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 522.6,520.5 c -0.8,2.3 1.1,5.5 3.3,5.5 1,0 2.9,-0.9 4.2,-1.9 2.9,-2.3 2,-3.6 -3.2,-4.5 -2.8,-0.5 -3.8,-0.3 -4.3,0.9 z"
|
||||||
|
+ id="path56"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 546.2,524.2 c -0.7,0.7 -1.2,2 -1.2,3.1 0,1.4 0.6,1.8 2.7,1.5 3.1,-0.3 4.4,-3.5 2.1,-4.9 -1.7,-1.2 -2.2,-1.1 -3.6,0.3 z"
|
||||||
|
+ id="path57"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 580.8,527.1 c -2.4,1.3 -2.3,3.6 0.2,4.9 4.2,2.3 8,-1.6 4.8,-4.8 -1.4,-1.4 -2.7,-1.5 -5,-0.1 z"
|
||||||
|
+ id="path58"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 401,494.7 c -7.4,9 -12.3,42.8 -8.6,58.6 2,8.3 2,8.2 0,10.1 -2.7,2.7 -6,1.8 -13.5,-3.9 -11,-8.3 -12.9,-7.4 -12.9,6.1 0,5.2 -0.1,5.4 -3.6,6.9 -2,0.8 -5.2,2.9 -7.1,4.6 -4,3.5 -6.8,3.4 -14.2,-0.7 -2.4,-1.3 -5.1,-2.4 -6.1,-2.4 -3.5,0 -4,6.3 -1,12.5 1.1,2.2 1.9,5.4 2,7.2 0,1.8 0.7,5.3 1.6,7.9 1.4,4 2.1,8.8 2.3,14.2 0.1,0.7 1.3,1.7 2.9,2.3 1.5,0.5 4.4,2.9 6.5,5.3 5.2,6.1 12.2,10.6 16.6,10.6 5,0 5.8,0.8 7.4,7 1.5,5.6 3,9.3 7.6,19 2.4,5.1 2.6,6.5 2.6,19.5 0,7.7 0.4,14.6 0.8,15.2 0.5,0.7 2.1,1.3 3.6,1.3 6.1,0 12.1,-11.4 12.1,-23.3 0,-9.5 0.3,-9.7 12.9,-9.7 11.9,0 12.1,0.1 12.1,6.3 0,7.6 6.3,21.6 10.5,23.5 2.9,1.3 5.5,1.5 7.9,0.6 2.6,-1 2.2,-12.3 -0.5,-16.9 -2.7,-4.5 -2.2,-10.6 1.8,-21 2.4,-6.4 2.6,-8.5 3,-25.9 0.3,-11.5 0.1,-19.7 -0.5,-21 -0.6,-1.1 -1.8,-4.1 -2.7,-6.6 -1.7,-4.5 -9.6,-14.7 -12.1,-15.7 -0.8,-0.3 -3.1,-2.1 -5.2,-4.2 -2.1,-2 -6,-5.4 -8.6,-7.6 -6.6,-5.6 -7.7,-10 -7.6,-32.5 0,-9.6 0.4,-20.2 1,-23.5 1.4,-8.8 1.2,-17.5 -0.6,-22.8 -1.4,-4.1 -1.9,-4.7 -4.4,-4.7 -2.1,0 -3.7,1 -6,3.7 z m 6.5,13.8 c -0.1,6.1 -0.7,17.8 -1.4,26.2 -1.3,13.8 -1.3,15.9 0.3,23.9 1.7,8.3 6.5,19.4 8.9,20.3 2.5,1 18.6,15.4 20.9,18.8 1.5,2.1 4,7.8 5.7,12.7 3.7,10.5 4.3,23.5 1.5,30.2 -2.3,5.4 -5.4,22.4 -5.4,29.3 0,3.2 0.7,8.2 1.6,11 1.4,4.1 1.4,5.3 0.4,6.6 -0.9,1.1 -1.7,1.2 -3.1,0.4 -2.8,-1.5 -4.7,-5.9 -6,-14.1 -0.7,-4.4 -2.1,-8.8 -3.6,-11.1 l -2.4,-3.9 -13,0.3 c -7.7,0.2 -13.3,0.7 -13.9,1.4 -0.5,0.6 -1.4,5.1 -2,10 -1.9,14.5 -2,14.9 -3.9,17.4 -2.7,3.5 -5.6,2.2 -4.6,-2.2 2,-8.8 0.2,-22.2 -4.3,-31.8 -1.6,-3.5 -3.9,-9.5 -5.1,-13.3 -4.1,-13.4 -2.2,-33.8 4,-42.8 1.1,-1.4 1.9,-3 1.9,-3.4 0,-1.4 4.5,-7.4 5.5,-7.4 0.6,0 3.2,-2.3 5.9,-5.1 l 4.8,-5.1 -0.6,-6 c -0.4,-3.3 -1.2,-7.2 -1.8,-8.6 -0.7,-1.6 -1.2,-10.3 -1.2,-21.7 -0.1,-16.6 0.2,-20.2 2.3,-28.5 2.5,-10.5 4.8,-15.2 7.1,-14.8 1.2,0.3 1.5,2.3 1.5,11.3 z M 377.9,564 c 2.4,1.7 5.2,3 6.1,3 1,0 2.3,0.7 3,1.5 0.7,0.8 1.9,1.5 2.6,1.5 1.7,0 5.4,3.5 5.4,5.1 0,0.6 -3.3,4.3 -7.2,8.3 -4,3.9 -8.3,9.2 -9.4,11.6 -6.6,13.7 -6.8,14.4 -7.2,23.8 -0.4,7.7 -0.7,9.4 -2.3,10.3 -2.7,1.4 -7.5,-0.9 -14,-6.6 -6.5,-5.8 -10.7,-13.9 -13.9,-27 -1.2,-5 -2.7,-10 -3.3,-11.3 -1.8,-3.7 0.5,-4.9 4.2,-2.1 4.6,3.4 10.8,3.2 15.7,-0.6 2.1,-1.7 5.5,-4.1 7.4,-5.4 4.5,-3 5,-3.8 5,-8.3 0,-4.4 0.8,-6.8 2.4,-6.8 0.6,0 3.1,1.4 5.5,3 z"
|
||||||
|
+ id="path59"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 406.6,599.5 c -1.2,1.3 -1.3,2.1 -0.4,4 1.9,4.2 6.4,2.2 4.8,-2.1 -1.2,-3.1 -2.6,-3.7 -4.4,-1.9 z"
|
||||||
|
+ id="path60"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 380.7,574.6 c -1.3,1.3 -0.7,4.4 0.7,4.4 0.8,0 1.7,-0.4 2,-0.9 0.7,-1.1 -1.8,-4.4 -2.7,-3.5 z"
|
||||||
|
+ id="path61"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 365.8,587.7 c -2.9,0.7 -2.3,5.1 0.8,5.9 3.1,0.8 4.7,-0.6 4.2,-3.7 -0.3,-2.4 -1.9,-3.1 -5,-2.2 z"
|
||||||
|
+ id="path62"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 349,600 c 0,2.5 0.4,3.1 1.8,2.8 1.1,-0.2 1.7,-1.2 1.7,-2.8 0,-1.6 -0.6,-2.6 -1.7,-2.8 -1.4,-0.3 -1.8,0.3 -1.8,2.8 z"
|
||||||
|
+ id="path63"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 849.2,521.2 c -1.1,1.3 -2.4,3.6 -2.8,5.2 -0.4,1.6 -1.8,4.5 -3.1,6.4 -1.2,1.9 -2.3,3.8 -2.3,4.2 0,2.7 -12.9,1.2 -22.5,-2.7 -2.9,-1.1 -7.5,-1.6 -16.5,-1.6 -12,0 -12.8,0.1 -19.2,3.2 -9.2,4.3 -16.4,11.6 -21.1,21.3 -2,4.2 -3.7,8.5 -3.7,9.6 0,1.1 -0.7,3.9 -1.5,6.2 -2,5.6 -1.9,10.8 0.4,21.1 2.6,11.9 5.2,17.1 11.6,23.2 6.5,6.3 16.3,10.5 27,11.9 3.9,0.4 9.7,1.2 13,1.7 3.3,0.5 9.6,1 14,1 4.4,0.1 11.8,0.8 16.5,1.6 8.9,1.6 15.4,1.2 19.9,-1.1 3.3,-1.8 5.3,-1.8 7.7,0.1 3.66122,3.39212 5.85278,2.92751 5.85278,0.22751 0,-1.2 -3.35278,-3.82751 -4.45278,-4.52751 -1.4,-0.8 -2,-2.3 -2,-4.7 0,-2.2 0.44665,-4.81655 2,-5.5 4.85334,-2.1354 4.1247,-5.06573 1.8247,-5.86573 -1,-0.4 -4.6247,-2.03427 -6.3247,-3.83427 -3.9,-4.5 -10.6,-5.8 -12.5,-2.4 -0.6,1.2 -1,4.6 -0.8,7.4 l 0.3,5.2 -3.9,-0.2 c -2.2,-0.2 -4.4,-0.7 -5,-1.3 -0.5,-0.5 -2,-1 -3.2,-1 -4,0 -4.5,-2 -2.8,-11.1 2.3,-12.2 0.7,-25.6 -3.7,-30 -1,-1 -1.9,-2.3 -1.9,-2.7 0,-1.9 -10,-10.3 -15.2,-12.6 -4.4,-2 -7.3,-2.6 -13,-2.6 -7.6,0 -9.8,0.9 -9.8,4.2 0,1.9 3.4,2.5 4.5,0.8 1,-1.5 8,-1.2 12.2,0.6 12.3,5.2 15.7,8.3 20.8,19 3.5,7.3 3.7,8.1 3.2,15.3 -0.3,4.9 -1.2,9 -2.5,11.4 -3.5,6.5 -4.1,6.9 -9.6,6.4 -10.9,-1 -24.3,-3.9 -28.5,-6.3 -6.2,-3.4 -8.6,-1.1 -3.6,3.6 4,3.8 26.9,7.7 37.5,6.4 3.1,-0.4 5.9,-0.1 8.4,1 2.4,1 6.8,1.6 11.7,1.6 8.7,0 9.2,-0.4 8.7,-7.4 -0.4,-6.3 3.8,-7.2 6.7,-1.5 3.2,6 0.4,14.8 -5.2,17 -4.4,1.6 -57.1,-2.9 -66.3,-5.8 -14.9,-4.6 -22.3,-11.1 -26.9,-24 -2.1,-5.5 -2.3,-7.6 -1.9,-19 0.5,-14.6 1.9,-18.7 9.4,-28.3 7.9,-10 12,-12.4 23.5,-14.1 7.7,-1.1 9.6,-1 20.9,1.1 6.9,1.2 13,2.7 13.6,3.2 0.7,0.5 3.4,1.1 6.1,1.4 3.8,0.5 5.2,0.3 6.2,-1 0.7,-0.9 1.9,-1.6 2.6,-1.6 1.1,0 4.3,-6.1 5.9,-11.7 0.4,-1.1 1.4,-2.7 2.2,-3.4 1.4,-1.1 2.1,-0.7 5.3,2.7 2,2.2 4.4,5.5 5.3,7.2 1.3,2.5 2.4,3.2 4.8,3.2 2.6,0 8.55889,1.16838 9.0988,-1.57417 C 877.01728,532.76023 869.5,533.1 867.1,532.7 c -1.6,-0.4 -3.2,-1.4 -3.5,-2.4 -0.8,-2.6 -9.2,-11.3 -10.9,-11.3 -0.7,0 -2.3,1 -3.5,2.2 z"
|
||||||
|
+ id="path64"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1"
|
||||||
|
+ sodipodi:nodetypes="cscscsccsccccsccccscssccccccsscsscssccccccccccsccccccccccccsccccssccsc" /><path
|
||||||
|
+ d="m 32,531.7 c -0.8,0.3 -2.8,1.8 -4.5,3.3 -1.6,1.6 -3.9,3 -5,3.1 -3.1,0.4 -16.7,-2.2 -19.7,-3.7 -2.8,-1.4 -4.8657393,-1.6614 -3.9269514,1.50225 L -0.53033009,538.9708 6.3,540.3 c 3.4,0.3 7.7,1.3 9.5,2.2 3.9,2 8.1,1.3 12,-1.9 1.5,-1.3 4.1,-3.1 5.9,-4 4.6,-2.3 6.3,-0.3 6.3,7.4 0,4.7 0.5,6.4 2.4,8.7 1.3,1.5 2.9,4.6 3.7,6.8 1.6,4.8 1.7,20.2 0.2,23 -0.6,1.1 -5.2,6 -10.2,11 -13.1,12.9 -14.8,17.7 -8.1,23.2 2.1,1.8 4.3,3.3 4.8,3.3 0.5,0 1.7,0.9 2.7,2 1,1.1 4.7,3.4 8.2,5 4.6,2.2 6.3,3.5 6.3,5 0,2.8 -3.8,2.6 -8.4,-0.5 -2.1,-1.4 -7.2,-4.4 -11.4,-6.7 -4.2,-2.2 -9.4,-5.2 -11.4,-6.4 -2,-1.3 -5.6,-2.6 -8,-3 -2.4,-0.3 -5.3,-1.3 -6.5,-2 -3.3,-2.1 -6.3550291,-1.83258 -6.3550291,1.46742 0,2 2.5550291,3.13258 3.5550291,3.13258 0.8,0 1.5,0.4 1.5,0.8 0,1.4 7.4,8.8 15.3,15.1 4.2,3.4 7.7,6.7 7.7,7.2 0,1.7 -3,2.2 -6.3,0.8 -4,-1.6 -16.8,-9.7 -18.4,-11.7 -1.1,-1.4 -2.8909903,-1.46517 -2.8909903,0.73483 0,2.8 7.6909903,9.36517 11.5909903,10.56517 1.2,0.4 4.1,2 6.5,3.6 3,2 5.5,2.9 8.4,2.9 3.5,0 4.1,-0.3 4.7,-2.6 1.2,-4.7 -0.8,-8.7 -6.1,-12.2 -6,-4 -13.5,-10.7 -13.5,-12.1 0,-0.5 0.5,-1.3 1,-1.6 1.1,-0.7 12.7,5.3 26.7,13.7 7.5,4.5 8.7,4.9 13.5,4.6 4.2,-0.2 5.4,-0.7 5.6,-2.1 0.9,-4.5 -0.8,-6.3 -10.2,-11.7 -5.3,-3 -11.4,-7 -13.7,-9 -3.5,-3 -4.1,-4 -3.6,-6.1 0.4,-1.4 1.4,-3.3 2.4,-4.2 1,-0.9 4.5,-4.5 7.8,-7.8 5.6,-5.7 7.4,-7.4 13.3,-13.1 1.7,-1.7 2.2,-2.9 1.7,-4.8 -0.3,-1.4 -0.8,-3.9 -1.1,-5.5 -2.2,-14.7 -2.9,-17.2 -5,-20.1 -1.6,-2.1 -2.9,-5.9 -3.9,-11.9 -0.9,-4.8 -1.8,-9.2 -2.1,-9.6 -0.6,-1 -8,-1.1 -10.4,-0.2 z"
|
||||||
|
+ id="path65"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1"
|
||||||
|
+ sodipodi:nodetypes="sccssccccsscccccsscscccccssscsccscssccscscccccscccccccs" /><path
|
||||||
|
+ d="m 846,557.2 c 0,2.6 4,6.8 6.4,6.8 2.8,0 6.7,-3.5 6,-5.4 -0.3,-0.9 -2,-1.4 -4.2,-1.3 -2,0 -4.7,-0.3 -5.9,-0.8 -1.7,-0.5 -2.3,-0.4 -2.3,0.7 z"
|
||||||
|
+ id="path66"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 829.4,559.4 c -1.2,4.8 3.2,8.6 6.4,5.4 1.7,-1.7 1.5,-4.4 -0.4,-6.2 -2.3,-2.4 -5.3,-2 -6,0.8 z"
|
||||||
|
+ id="path67"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 4.4,565.4 c -1,2.6 0.4,4.8 2.8,4.4 3.3,-0.4 3.3,-5.2 0,-5.6 -1.3,-0.2 -2.5,0.3 -2.8,1.2 z"
|
||||||
|
+ id="path68"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 27.3,564.7 c -2,0.7 -1.5,4.1 0.6,5.3 4.4,2.3 11.1,0.1 11.1,-3.8 0,-1.8 -2,-2.5 -3.6,-1.1 -1.1,0.9 -2,0.9 -4,0 -1.4,-0.6 -2.6,-1.1 -2.7,-1 -0.1,0 -0.8,0.3 -1.4,0.6 z"
|
||||||
|
+ id="path69"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 301.3,656.5 c -1.2,0.9 -3.2,3.3 -4.4,5.5 l -2.3,4 h -11.5 c -6.4,0 -13.3,0.5 -15.3,1 -4.2,1.2 -7.8,-0.1 -11.3,-4 -2.4,-2.7 -7.4,-5 -10.9,-5 -2.1,0 -2.7,0.7 -3.5,3.7 -1.6,6.5 -3.4,16.6 -4.1,22.8 -0.3,3.3 -1.2,7 -2,8.2 -1.2,1.8 -1.2,2.8 -0.2,5.6 0.8,2.1 1.2,9.5 1.2,20.5 v 17.1 l -3.1,1.6 c -10.2,5.3 -14.6,13.7 -13.4,25.8 0.9,8.8 3.9,15.3 10.5,23 2.8,3.2 5,6.3 5,6.9 0,0.5 -0.8,2.6 -1.7,4.5 -2.3,5 -0.9,6.8 5.3,6.9 2.7,0.1 6.4,0.5 8.3,0.9 3,0.6 3.8,0.4 5.4,-1.6 1.8,-2.3 2.6,-2.4 14.6,-2.6 6.9,-0.2 17.5,-0.7 23.6,-1.3 l 11,-1 3.8,4.5 c 4.3,5 5.6,5.4 8.2,2.5 1,-1.1 2.5,-2 3.4,-2 2.8,-0.1 5.9,-2.4 8.9,-6.6 1.7,-2.3 5.2,-6.3 7.9,-9 4.4,-4.4 12.6,-15.9 16.1,-22.4 0.7,-1.4 1.9,-3.2 2.6,-4 0.6,-0.8 2.4,-3.8 3.9,-6.6 2.1,-4.1 2.7,-6.5 2.7,-11.7 0,-5.7 -0.3,-6.8 -2.2,-8.1 -1.2,-0.9 -2.6,-1.6 -2.9,-1.6 -1.5,0 -6.9,5.2 -8.4,8 -0.8,1.7 -2.2,4.3 -3.1,6 -1.7,3.3 -5.4,4.2 -5.4,1.2 0,-2.1 -8.7,-11.2 -10.7,-11.2 -5,0 -6.9,-9.4 -3.3,-16 7.3,-13.3 7.4,-13.8 6,-21.9 -0.8,-4.2 -1.3,-9.3 -1.2,-11.4 0.2,-3.5 -0.3,-4.4 -5.1,-9 -4.6,-4.5 -11.7,-14.5 -11.7,-16.5 0,-0.3 -1.2,-2.3 -2.6,-4.4 -2.9,-4.1 -4.8,-4.6 -8.1,-2.3 z m 4.9,6.2 c 0.8,1 2.5,3.8 3.7,6.3 1.3,2.5 4,6.8 6.2,9.7 2.1,2.9 3.9,5.5 3.9,5.9 0,0.4 0.6,1.5 1.3,2.3 1.3,1.5 2.9,7.5 4.3,15.3 0.7,4.5 -0.9,9.9 -5,15.8 l -3.1,4.5 -0.7,19 c -0.5,10.9 -1.5,22.2 -2.4,26.4 -1.3,5.7 -1.5,10.2 -1.1,18.6 0.7,13.2 0.3,15.7 -2.7,15.3 -2.5,-0.4 -3,-2.6 -4.6,-22.4 -0.6,-7.6 -1.3,-14.1 -1.5,-14.3 -0.2,-0.1 -0.9,0 -1.6,0.4 -0.9,0.6 -1,4.4 -0.6,14.6 0.3,8.3 0.1,14.1 -0.4,14.5 -1.7,1 -41.8,1.5 -43.6,0.5 -1.5,-0.8 -1.7,-2.5 -1.4,-13.8 0.3,-14.8 -0.3,-18.3 -3.1,-18.3 -1.9,0 -1.9,0.7 -1.7,17.2 0.3,18.2 -0.2,22.1 -2.9,21.6 -2.2,-0.4 -3.1,-5.3 -3.1,-16.3 0,-5 -0.4,-10.3 -1,-11.8 -0.6,-1.6 -1.1,-6.3 -1.1,-10.5 0,-4.2 -0.7,-13.3 -1.5,-20.2 -1,-8.3 -1.2,-15.4 -0.7,-21 0.4,-4.7 0.6,-9.2 0.4,-10 -0.3,-2 1.8,-43.9 2.4,-46.8 0.7,-3.7 4.4,-2.7 10.8,3 4.7,4.2 6.4,5.1 9.2,5 1.9,-0.1 3.9,-0.4 4.4,-0.7 0.4,-0.3 6.3,-0.5 13.1,-0.6 h 12.3 l 3.3,-3.7 c 1.8,-1.9 3.5,-4.4 3.9,-5.4 0.7,-2.3 2.7,-2.3 4.6,-0.1 z m 49.8,81.8 c 0,3.4 -7.4,18.8 -10.9,23 -1,1.1 -2.7,3.7 -3.9,5.8 -1.2,2 -2.6,4.3 -3.2,5 -0.5,0.6 -2.5,3.2 -4.3,5.7 -3.6,4.8 -6.7,6.4 -6.7,3.3 0,-1 1.8,-4.9 3.9,-8.6 2.2,-3.7 4.3,-7.7 4.6,-8.9 0.4,-1.3 1.3,-3 2,-3.8 0.8,-0.8 2.3,-3.5 3.5,-6 5.1,-10.9 12.2,-20.6 14.2,-19.4 0.4,0.3 0.8,2 0.8,3.9 z m -116.6,7 c 0.9,3.8 1.6,9.9 1.7,13.5 0,3.6 0.4,9.9 0.8,14 0.8,7.3 0.1,12 -1.7,12 -1.5,0 -9,-10.7 -11.1,-15.8 -1.1,-2.6 -2.8,-7.3 -3.7,-10.4 -1.7,-5.7 -1.7,-5.8 0.7,-12 1.9,-4.8 3.4,-6.9 6.4,-9 4.6,-3.1 4.4,-3.4 6.9,7.7 z m 90.4,-6.1 4.6,4.4 v 7.4 c 0,6.8 -0.4,8 -5.2,17.4 -2.9,5.6 -5.2,10.8 -5.2,11.7 0,2.2 -5.1,6 -6.4,4.7 -1.3,-1.3 1,-30.2 3.1,-38.3 0.8,-3.2 1.2,-6.6 0.9,-7.4 -0.7,-1.6 1,-4.3 2.6,-4.3 0.5,0 3,2 5.6,4.4 z M 241.5,799 c 0.3,0.6 -0.1,1.3 -1,1.6 -1.9,0.8 -3,0 -2,-1.5 0.8,-1.4 2.2,-1.4 3,-0.1 z"
|
||||||
|
+ id="path70"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 302.8,683.5 c -1.5,3.4 0.2,5.2 4.9,5.1 3.2,-0.2 3.9,-0.6 4.1,-2.6 0.7,-4.9 -6.9,-7 -9,-2.5 z"
|
||||||
|
+ id="path71"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 252.3,685.3 c -2.8,3.1 -3.6,6.7 -1.6,7.4 0.9,0.4 2.1,-0.1 2.9,-1.2 1.3,-1.8 1.4,-1.8 3.3,0 2.2,1.9 5.1,1.4 5.1,-0.8 0,-1.2 -2.1,-3.5 -6.1,-6.5 -1.3,-1 -2,-0.8 -3.6,1.1 z"
|
||||||
|
+ id="path72"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 282.4,688.4 c -0.9,2.2 0.2,4.6 2.1,4.6 1.2,0 1.5,-0.8 1.3,-2.7 -0.3,-3 -2.5,-4.2 -3.4,-1.9 z"
|
||||||
|
+ id="path73"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 49,668.2 c -1.7,1.9 -7.3,11 -8.7,13.8 -0.6,1.4 -1.9,5.4 -2.8,9 -2.6,10 -7.1,23.1 -10,29.6 -4.7,10.4 -7.3,17.7 -9.5,26.9 -1.2,4.9 -2.6,11 -3.3,13.5 -0.7,2.7 -1.2,12.5 -1.2,24.5 v 20 l 3.2,6 c 4.3,8.2 21.8,25.5 30.4,30.2 5.7,3 7.1,3.3 12.9,3.1 l 6.5,-0.3 -0.1,-4 c -0.1,-3.4 -0.9,-4.6 -4.9,-8.2 -2.5,-2.4 -9.1,-7.2 -14.5,-10.8 -15.1,-10 -14.8,-12.1 1.5,-11.1 6.1,0.4 11.9,0.4 12.8,0.1 0.8,-0.4 2.8,-2.4 4.3,-4.6 1.4,-2.1 3.2,-3.9 3.8,-3.9 0.6,0.1 2,1.5 3.1,3.3 2.9,4.6 6.2,4.8 8,0.4 l 1.4,-3.4 10.8,-0.6 c 11.5,-0.6 11.5,-0.6 14.8,4.7 1.6,2.5 3.4,0.5 5,-5.3 1,-4 1.1,-5.9 0.3,-8 -1.6,-3.8 -1.9,-44.2 -0.3,-50.1 1.6,-6 2.6,-7.7 7.9,-13.9 4.3,-5.1 5.1,-7.2 7.5,-18.9 1.5,-7.5 1.5,-7.7 -2.3,-10.3 -3.9,-2.6 -9.8,-13.4 -11.5,-20.9 -3.2,-14.2 -6.3,-15.4 -15.6,-5.8 l -6,6.2 -12.7,0.4 -12.7,0.4 -2.8,-2.9 c -1.5,-1.7 -4.1,-4.7 -5.8,-6.7 -3.1,-3.8 -7.3,-4.8 -9.5,-2.4 z m 10.6,11 c 3,5.7 5.5,6.1 27.2,4 9.1,-0.8 9.4,-0.9 13.5,-5 2.4,-2.3 5,-4.2 5.9,-4.2 1.6,0 5.8,9.8 5.8,13.6 0,1.1 1.6,4.3 3.6,7.2 6.9,10.4 8.4,20.1 4,27.1 -1.4,2.2 -2.9,4.1 -3.3,4.2 -1.7,0.8 -7,9.6 -8.1,13.5 -1.5,5.1 -1.6,35.4 -0.2,44 1,6.4 0.2,13.5 -1.5,13.5 -0.6,0 -1.4,-4.1 -1.9,-9.1 -0.4,-4.9 -1.2,-9 -1.7,-9 -0.5,0 -1.2,-1.8 -1.5,-4 -0.8,-4.6 -3.4,-5.6 -3.3,-1.3 0.1,3.4 1.4,11.6 2.7,16.5 1.5,5.6 0.2,6.5 -10.4,7.3 l -9.2,0.7 -0.6,-3.9 c -0.3,-2.1 -0.5,-7.5 -0.4,-12 0,-8.5 -0.4,-10.3 -2.7,-10.3 -2.3,0 -2.9,4.9 -1.4,11.5 1.7,7.5 1.9,19.7 0.2,20.2 -2,0.7 -3.1,-2.9 -5.1,-16.3 C 69,773.1 68.4,771 66.4,771 c -1.9,0 -1.8,6.2 0.1,13.7 1.9,7.4 2,14.2 0.1,14.9 -0.8,0.3 -3.3,0.2 -5.7,-0.3 l -4.2,-0.8 -0.1,-9.5 c -0.1,-8.2 -0.5,-10.2 -2.8,-14.6 -4.5,-8.6 -14.2,-13.9 -18.2,-9.9 -2.2,2.3 -1.4,3.1 4.3,4.5 3.2,0.8 5.9,2.3 8.2,4.6 l 3.4,3.5 0.3,11.8 0.4,11.8 3.9,1.2 c 7.5,2.3 3.4,5.3 -6.2,4.6 C 28,805 26,805 26,807 c 0,2.1 18.8,18.9 24.2,21.6 4,2 10.8,8.3 10.8,10 0,2 -3.7,2.6 -7.8,1.3 -4.8,-1.5 -12,-7.1 -20.5,-15.6 C 22.6,814 20.1,810.1 18.8,802.8 c -1.5,-9.1 -0.2,-42.6 1.8,-48.1 0.9,-2.3 2.8,-8.5 4.2,-13.7 1.4,-5.2 2.9,-9.7 3.2,-10 1.3,-0.9 9,-19.9 10.1,-24.7 0.6,-2.7 2.2,-8.2 3.6,-12.3 1.3,-4.1 2.9,-9.2 3.5,-11.3 0.6,-2.1 2.6,-5.5 4.5,-7.4 l 3.3,-3.6 2.6,2.4 c 1.4,1.3 3.2,3.6 4,5.1 z"
|
||||||
|
+ id="path74"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 58.4,699.4 c -1,2.7 0.1,5 2.8,6 3.5,1.2 5.8,-0.6 5.8,-4.5 0,-3 -1.7,-3.8 -3.7,-1.8 -0.8,0.8 -1.3,0.8 -1.7,0 -1,-1.5 -2.6,-1.4 -3.2,0.3 z"
|
||||||
|
+ id="path75"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 106.7,701.7 c -0.9,0.9 -0.8,3.5 0.2,5.1 1.3,2.1 6.1,-0.6 6.1,-3.5 0,-1.9 -0.5,-2.3 -2.8,-2.3 -1.6,0 -3.2,0.3 -3.5,0.7 z"
|
||||||
|
+ id="path76"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 85.7,702.7 c -1.3,1.2 -0.7,5 0.9,6.3 1.2,1.1 1.8,1 3.1,-0.3 1.4,-1.3 1.4,-2.1 0.5,-4.2 -1.1,-2.4 -3.1,-3.2 -4.5,-1.8 z"
|
||||||
|
+ id="path77"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 50.3,708 c -3.2,1.3 -3,4.8 0.3,6.1 5.3,2 8.6,-1.8 4.8,-5.5 -1.7,-1.8 -2,-1.8 -5.1,-0.6 z"
|
||||||
|
+ id="path78"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 695.5,710 c -4,2.6 -8.3,7.9 -12.4,15.3 -14.2,26.2 -16.5,29.9 -19.9,32.5 -3.6,2.7 -5.5,2.7 -18.7,-0.2 -8.5,-1.9 -18.1,-2.7 -38.3,-2.9 -15,-0.2 -15.4,-0.2 -17.3,-2.7 -1.1,-1.4 -2.7,-4.1 -3.5,-6 -3.7,-9 -7,-15 -8.3,-15 -1.7,0 -7.5,6.3 -10,11 -1,1.9 -3,4.7 -4.4,6.2 -2.5,2.7 -3.1,2.8 -11.5,2.8 h -9 l -5.8,-4.5 c -3.1,-2.5 -6.3,-4.5 -7,-4.5 -3.5,0 -6.4,14.7 -6.4,32.7 0,17.6 1.2,20.5 13.9,32.6 13,12.2 14.3,16.1 11.2,34.7 -1.4,8.3 -1.4,15.7 -0.1,16.5 2.1,1.3 7,-0.7 8.5,-3.4 1.9,-3.9 5.2,-13.6 6.5,-19.6 1,-4.4 2.3,-6.4 4.1,-6.5 1.4,0 1.7,7.6 0.9,18.1 -0.9,11.4 -0.3,15.9 2.4,15.9 2.6,0 7.2,-4.8 8.4,-8.7 3.1,-10.6 4.1,-14.2 5.2,-19 1.3,-5.9 4.5,-8.4 9,-7.2 3.9,1.1 20,0.9 25,-0.2 8,-1.9 18.7,-2.3 19.6,-0.7 0.5,0.7 1,7.4 1.1,14.8 0.1,7.4 0.2,14 0.2,14.6 0.1,1.5 4.7,2.7 7.2,1.9 2.6,-0.8 5,-5.7 5.5,-11.1 0.2,-2.5 1,-5.7 1.8,-7.2 0.7,-1.5 1.6,-4.3 2,-6.4 0.7,-3.9 3.3,-5.8 4.3,-3.2 0.3,0.9 0.3,7.1 0,13.8 -0.6,12.4 -0.5,13.1 2.5,15.4 1.3,1.1 2.2,1.1 5,-0.1 2.7,-1.1 3.7,-2.5 5.6,-7.3 1.3,-3.2 2.7,-8.8 3.2,-12.4 0.5,-3.6 1.5,-8.1 2.1,-10 1.2,-3.8 1.9,-7 4.4,-19.5 1.7,-8.9 1.3,-14.6 -1.6,-23.9 -3.2,-10.1 -2.7,-13.3 4.4,-24.7 1.2,-1.9 3.1,-5 4.2,-6.8 1.1,-1.9 3,-4.8 4.2,-6.7 2.7,-4.2 9.6,-19.5 11.3,-25.1 1.6,-5.3 0.7,-11.3 -2.1,-13.6 -2.7,-2.2 -3.7,-2.1 -7.4,0.3 z m 4.8,6.7 c 0.3,1.6 0.2,4.6 -0.2,6.8 -0.9,4.8 -8.4,20.5 -12.2,25.5 -1.4,1.9 -3.7,5.5 -4.9,8 -1.2,2.5 -3.2,5.8 -4.4,7.5 -1.1,1.6 -2.9,5.2 -3.8,7.8 -1.7,4.8 -1.7,5 1.4,17 l 3.1,12.1 -1.7,9.5 c -1,5.3 -2.3,11.4 -3.1,13.6 -0.7,2.2 -2.1,8.5 -3,14 -2.4,15.4 -2.5,15.5 -4.5,15.5 -2.7,0 -3.2,-2.6 -2.8,-14.3 0.3,-11.5 -0.9,-15.7 -4.6,-15.7 -4.8,0.1 -8.3,6.6 -10.1,19 -0.7,4.7 -2.9,9 -4.5,9 -0.6,0 -1,-5.3 -1,-13.3 0,-9 -0.4,-13.7 -1.2,-14.5 -0.9,-0.9 -8.7,-1.2 -28.9,-1.2 h -27.7 l -2.5,2.9 c -1.6,1.9 -3.3,6.6 -5.1,13.6 -3.1,12.3 -5,17.5 -6.6,17.5 -1.9,0 -2.1,-2.5 -0.9,-9.1 2.2,-12.2 2.2,-15.3 0,-19.8 -2.4,-4.6 -3.7,-5 -7.3,-2.2 -2.4,1.9 -4.4,7.2 -6.8,17.6 -0.6,2.7 -1.8,6.1 -2.7,7.4 -2.5,3.9 -3.4,0.5 -2.2,-8 2,-14.1 2.2,-21.2 0.7,-24.7 -1.4,-3.1 -9.1,-11.7 -17.7,-19.5 -3.9,-3.6 -7.1,-9.2 -7.1,-12.3 0,-0.8 1.1,-1.9 2.5,-2.4 3.3,-1.3 3.2,-3.3 -0.6,-6.3 l -3.1,-2.4 1.1,-7.9 c 0.6,-4.3 1.2,-10.1 1.4,-12.9 0.3,-6.7 2.5,-7.1 8.2,-1.5 l 4.3,4.2 9.8,-1.1 c 13.7,-1.6 14.5,-2.1 20,-12.9 0.9,-1.9 2.4,-3.6 3.2,-3.9 2,-0.8 4.8,3.1 6.9,9.6 2.7,8.4 4.5,9.1 23.4,9.1 10.9,0 17,0.4 20.5,1.5 2.7,0.8 6.3,1.5 7.9,1.5 1.7,0 7.7,0.9 13.5,2.1 8.9,1.7 11.1,1.8 14.3,0.8 3.9,-1.3 10.7,-7.1 10.7,-9.3 0,-0.6 1.2,-2.8 2.6,-4.7 1.4,-1.9 4.5,-7.2 6.9,-11.9 4,-7.8 8.9,-16.1 13,-21.8 2.2,-3.1 5.1,-2.9 5.8,0.5 z"
|
||||||
|
+ id="path79"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 575,762 c 0,1.5 0.8,2.2 2.9,2.6 2.1,0.4 3.1,1.3 3.3,2.8 0.4,3 5.8,3.7 5.8,0.7 0,-1.4 -0.9,-2.3 -2.7,-2.7 -1.5,-0.4 -3.7,-1.8 -4.9,-3.1 -2.6,-2.8 -4.4,-3 -4.4,-0.3 z"
|
||||||
|
+ id="path80"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 555.1,769.4 c -1.6,2 0.3,5.6 2.9,5.6 2.6,0 4.5,-3.6 2.9,-5.6 -0.6,-0.8 -1.9,-1.4 -2.9,-1.4 -1,0 -2.3,0.6 -2.9,1.4 z"
|
||||||
|
+ id="path81"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 533.2,771.7 c 0.5,2.6 3.8,2.9 3.8,0.4 0,-1.5 -0.6,-2.1 -2.1,-2.1 -1.4,0 -1.9,0.5 -1.7,1.7 z"
|
||||||
|
+ id="path82"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><g
|
||||||
|
+ id="g1"
|
||||||
|
+ style="display:inline"><path
|
||||||
|
+ d="m 839.5,862.7 c -1.6,0.9 -4.2,2.9 -5.7,4.5 l -2.6,2.8 h 2.5 c 1.4,0 3.9,-1 5.5,-2.2 l 3.1,-2.1 1.8,2.1 c 0.9,1.2 2.5,2.2 3.4,2.2 1.4,0 1.6,-0.6 1,-2.8 -0.7,-3.1 -3.3,-6.2 -4.9,-6.2 -0.6,0.1 -2.4,0.8 -4.1,1.7 z"
|
||||||
|
+ id="path89"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1"
|
||||||
|
+ inkscape:label="path89" /><path
|
||||||
|
+ d="m 783.7,862.7 c -0.8,1 -1.9,3 -2.2,4.5 -0.6,2.4 -0.4,2.8 1.4,2.8 1.1,0 2.5,-0.9 3.1,-2 1.4,-2.6 4.2,-2.6 6.5,0 1,1.1 3.1,2 4.8,2 h 2.9 l -4.9,-4.5 c -5.2,-4.8 -8.9,-5.7 -11.6,-2.8 z"
|
||||||
|
+ id="path88"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /></g><g
|
||||||
|
+ id="g479"
|
||||||
|
+ inkscape:label="fish"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1"
|
||||||
|
+ transform="translate(252.06731,446.07601)"><path
|
||||||
|
+ d="m 52.769736,-42.117156 c -4.967114,4.169731 -4.967114,4.811228 -0.584367,14.433684 5.843664,12.829942 10.518595,15.716679 14.024793,8.980959 4.382747,-8.339462 9.057678,-6.094222 7.012396,3.528234 -1.753099,8.0187143 -1.460916,8.3394623 2.045282,3.207486 5.55148,-7.697965 8.765495,-6.73572 6.42803,1.603742 -1.753099,7.0564683 -1.460916,7.0564683 1.753099,0.9622463 3.506198,-5.7734743 3.798381,-5.7734743 5.55148,-0.320749 1.460916,5.131977 2.045282,4.811228 5.259297,-2.5659883 2.921832,-7.056468 2.629649,-7.697965 -1.460916,-6.094222 -3.798381,1.603742 -4.382747,0.641497 -2.921831,-3.848983 1.753099,-4.490479 1.460915,-5.131976 -1.753099,-2.24524 -5.551481,5.131977 -8.765496,0.962246 -4.382748,-5.452725 2.921832,-4.169731 2.921832,-4.490479 -0.584366,-1.282994 -7.012396,7.056468 -12.563877,5.131977 -8.473312,-2.565988 5.55148,-11.546948 -10.518595,-17.320421 -21.913738,-8.339462 z m 16.946624,0.962245 c 4.674931,1.924492 4.090564,4.169731 -3.798381,16.999673 -2.337466,3.848983 -3.506199,3.848983 -7.30458,0.641497 -10.810777,-9.943205 -2.045282,-23.093895 11.102961,-17.64117 z"
|
||||||
|
+ id="path48-2"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.306133" /><path
|
||||||
|
+ d="m 60.658681,-34.419191 c 1.168733,0.962245 2.921832,0.962245 4.090565,0 0.87655,-1.282994 0,-2.24524 -2.045282,-2.24524 -2.045283,0 -2.921832,0.962246 -2.045283,2.24524 z"
|
||||||
|
+ id="path49-0"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.306133" /><path
|
||||||
|
+ d="m 99.22686,-11.646045 c -4.674931,3.8489833 -4.674931,10.2639533 0,8.3394623 3.21401,-1.603743 4.38275,0.320749 4.38275,5.773474 0,14.4336837 7.59676,21.8108987 11.39514,10.9054497 1.7531,-4.8112277 6.13585,-11.5469467 9.64205,-14.7544327 8.18112,-7.056467 -0.58437,-11.5469473 -15.48571,-8.018713 -6.42803,1.603743 -8.47331,1.282994 -7.30458,-1.2829943 2.33746,-4.169731 1.46091,-4.49048 -2.62965,-0.962246 z m 21.91374,7.0564683 c 0,1.603743 -1.16874,3.207485 -2.92183,3.207485 -1.46092,0 -3.5062,3.528234 -4.67494,8.018714 -0.87654,4.4904797 -2.92183,7.0564677 -4.38274,6.0942217 -3.79838,-2.565988 -3.21402,-16.6789237 1.16873,-18.2826667 6.13585,-2.886736 10.81078,-2.245239 10.81078,0.962246 z"
|
||||||
|
+ id="path68-2"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.306133" /></g><g
|
||||||
|
+ id="g483"
|
||||||
|
+ inkscape:label="star1"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1"
|
||||||
|
+ transform="matrix(3.9452232,0,0,4.2240352,-552.25879,-827.74646)"><path
|
||||||
|
+ d="m 178.53387,240.94477 c -0.3,1.2 -1.6,2.4 -2.7,2.7 -2.1,0.6 -2.1,0.7 -0.4,2 0.9,0.7 1.7,2.1 1.7,3 0,1.8 1.5,2.2 2.5,0.6 0.4,-0.6 1.5,-0.8 2.6,-0.5 1.5,0.5 1.9,0.1 1.9,-1.7 0,-1.3 0.5,-2.9 1.2,-3.6 0.9,-0.9 0.8,-1.2 -0.7,-1.2 -1,0 -2.7,-0.8 -3.7,-1.7 -1.8,-1.6 -1.9,-1.6 -2.4,0.4 z m 4.3,2.3 c 1.3,0 1.4,0.3 0.6,1.1 -0.6,0.6 -0.9,1.8 -0.6,2.7 0.4,1 0.2,1.3 -0.6,0.8 -0.6,-0.4 -1.7,-0.3 -2.4,0.2 -0.9,0.8 -1.5,0.4 -2.3,-1.3 -0.9,-1.9 -0.9,-2.5 0.2,-2.9 0.8,-0.3 1.4,-1.3 1.4,-2.3 0.1,-1.7 0.1,-1.7 1.1,-0.1 0.5,1 1.7,1.8 2.6,1.8 z"
|
||||||
|
+ id="path175"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /></g><g
|
||||||
|
+ id="g480"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1"
|
||||||
|
+ inkscape:label="paw1"
|
||||||
|
+ transform="matrix(4.9319668,0,0,5.7559584,-126.28228,122.10017)"><path
|
||||||
|
+ d="m 166.13387,74.74477 c 0,0.8 0.5,1.5 1,1.5 0.6,0 1,-0.7 1,-1.5 0,-0.8 -0.4,-1.5 -1,-1.5 -0.5,0 -1,0.7 -1,1.5 z"
|
||||||
|
+ id="path46-3"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 162.13387,75.64477 c 0,0.9 0.5,1.6 1,1.6 0.6,0 1,-0.4 1,-0.9 0,-0.6 -0.4,-1.3 -1,-1.6 -0.5,-0.3 -1,0.1 -1,0.9 z"
|
||||||
|
+ id="path47-7"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 170.13387,76.24477 c 0,0.7 0.3,1 0.7,0.7 0.3,-0.4 0.3,-1 0,-1.4 -0.4,-0.3 -0.7,0 -0.7,0.7 z"
|
||||||
|
+ id="path50-5"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 160.13387,79.24477 c 0,0.5 0.7,1 1.6,1 0.8,0 1.2,-0.5 0.9,-1 -0.3,-0.6 -1,-1 -1.6,-1 -0.5,0 -0.9,0.4 -0.9,1 z"
|
||||||
|
+ id="path59-9"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 164.83387,78.94477 c -2.1,2.1 -0.7,5.5 2.1,4.8 3.5,-0.8 4.6,-2 3.9,-3.9 -0.6,-1.6 -4.8,-2.2 -6,-0.9 z"
|
||||||
|
+ id="path60-2"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /></g><g
|
||||||
|
+ id="g484"
|
||||||
|
+ inkscape:label="paw2"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1"
|
||||||
|
+ transform="matrix(4.040358,0,0,4.774807,-159.45488,-523.8208)"><path
|
||||||
|
+ d="m 77.733867,236.14477 c -0.4,0.7 -0.5,1.5 -0.2,1.8 0.9,0.9 1.9,-0.4 1.4,-1.8 -0.4,-1.1 -0.6,-1.1 -1.2,0 z"
|
||||||
|
+ id="path169"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 73.133867,238.24477 c 0,0.5 0.5,1 1,1 0.6,0 1,-0.5 1,-1 0,-0.6 -0.4,-1 -1,-1 -0.5,0 -1,0.4 -1,1 z"
|
||||||
|
+ id="path171"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 81.133867,238.84477 c 0,0.8 0.5,1.2 1,0.9 0.6,-0.3 1,-1 1,-1.6 0,-0.5 -0.4,-0.9 -1,-0.9 -0.5,0 -1,0.7 -1,1.6 z"
|
||||||
|
+ id="path172"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 74.733867,241.84477 c -2.1,2 -2.1,2 1.5,3.8 3.5,1.7 4.9,1.4 4.9,-1.3 0,-3.7 -3.7,-5.2 -6.4,-2.5 z"
|
||||||
|
+ id="path176"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 82.133867,242.24477 c 0,0.5 0.4,1 0.9,1 0.6,0 1.3,-0.5 1.6,-1 0.3,-0.6 -0.1,-1 -0.9,-1 -0.9,0 -1.6,0.4 -1.6,1 z"
|
||||||
|
+ id="path178"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /></g><g
|
||||||
|
+ id="g481"
|
||||||
|
+ inkscape:label="klubok1"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1"
|
||||||
|
+ transform="matrix(2.8077392,0,0,2.729068,127.57199,210.94513)"><path
|
||||||
|
+ d="m 220.93387,182.14477 c -7,6.3 -2.9,16.1 6.7,16.1 5.1,0 9.1,1.6 10,3.9 0.6,1.5 0.1,2.1 -5.6,6.1 -2.7,2 -1.9,5.2 1.7,6.8 4,1.9 5.3,1.4 1.4,-0.6 -4.9,-2.4 -5,-4.7 -0.3,-6.9 6.1,-2.9 5.8,-5.5 -1.5,-9.9 -0.2,-0.1 0.7,-1.8 1.9,-3.8 5.7,-9.8 -5.9,-19.2 -14.3,-11.7 z m 5.8,1.9 c -1.7,1.6 -1.8,1.6 -0.5,-0.5 0.7,-1.2 1.5,-2 1.8,-1.7 0.3,0.2 -0.3,1.2 -1.3,2.2 z m 4.4,-2.4 c 0,0.3 -0.5,0.8 -1.2,1.2 -0.7,0.4 -0.8,0.3 -0.4,-0.4 0.7,-1.2 1.6,-1.6 1.6,-0.8 z m -6.6,4.8 c 0.8,3.4 5.5,9 6.8,8.1 0.7,-0.3 0.8,-0.1 0.4,0.5 -0.4,0.6 -1.4,0.8 -2.3,0.5 -1.2,-0.5 -1.4,-0.3 -0.8,0.8 0.4,0.8 -0.6,0.1 -2.3,-1.5 -1.8,-1.6 -3.4,-3.7 -3.7,-4.7 -0.3,-1 -1.1,-1.7 -1.8,-1.5 -0.7,0.1 -0.9,0.1 -0.4,-0.1 0.4,-0.3 0.7,-1.4 0.7,-2.6 0,-1.7 0.5,-1.2 2,1.8 1.1,2.2 1.7,3.1 1.4,2 -0.8,-2.2 -1.6,-8.6 -1,-7 0.2,0.5 0.7,2.2 1,3.7 z m 7.8,-3 c -1.9,1.9 -1.4,3.2 0.6,1.7 1.4,-1.1 1.5,-1.1 0.5,0.1 -1.8,2 -1.6,3.3 0.3,2.6 1.4,-0.5 1.5,-0.4 0.4,0.9 -1,1.2 -1,1.5 0,1.5 0.8,0 1,0.3 0.6,0.7 -0.4,0.5 -1.4,0 -2.1,-1 -0.8,-1.2 -1.5,-1.4 -2,-0.8 -0.3,0.6 -1.1,1.1 -1.7,1.1 -0.6,0 -0.3,-1 0.8,-2.3 1,-1.2 1.2,-1.6 0.4,-1 -1.9,1.7 -3.5,1.7 -2.1,0 0.6,-0.8 0.7,-1.8 0.3,-2.2 -0.4,-0.5 -0.2,-0.5 0.4,-0.2 0.7,0.4 1.7,0 2.4,-0.8 0.7,-0.8 1.5,-1.5 1.8,-1.5 0.3,0 0.1,0.5 -0.6,1.2 z m -11.5,7.5 c -0.4,0.3 -1,0.3 -1.4,0 -0.3,-0.4 0,-0.7 0.7,-0.7 0.7,0 1,0.3 0.7,0.7 z m 0,2 c -0.4,0.3 -1,0.3 -1.4,0 -0.3,-0.4 0,-0.7 0.7,-0.7 0.7,0 1,0.3 0.7,0.7 z m 13,1 c -0.4,0.3 -0.7,0 -0.7,-0.7 0,-0.7 0.3,-1 0.7,-0.7 0.3,0.4 0.3,1 0,1.4 z m -11.2,1.3 c 0.3,0.5 0.4,1 0.1,1 -0.3,0 -0.8,-0.5 -1.1,-1 -0.3,-0.6 -0.4,-1 -0.1,-1 0.3,0 0.8,0.4 1.1,1 z"
|
||||||
|
+ id="path131"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 225.13387,192.04477 c 0,0.5 0.7,1.5 1.5,2.2 0.8,0.7 1.5,0.8 1.5,0.2 0,-0.5 -0.7,-1.5 -1.5,-2.2 -0.8,-0.7 -1.5,-0.8 -1.5,-0.2 z"
|
||||||
|
+ id="path132"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /></g><g
|
||||||
|
+ id="g483-8"
|
||||||
|
+ inkscape:label="star1"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1"
|
||||||
|
+ transform="matrix(3.9452232,0,0,4.2240352,-279.64123,-226.23287)"><path
|
||||||
|
+ d="m 178.53387,240.94477 c -0.3,1.2 -1.6,2.4 -2.7,2.7 -2.1,0.6 -2.1,0.7 -0.4,2 0.9,0.7 1.7,2.1 1.7,3 0,1.8 1.5,2.2 2.5,0.6 0.4,-0.6 1.5,-0.8 2.6,-0.5 1.5,0.5 1.9,0.1 1.9,-1.7 0,-1.3 0.5,-2.9 1.2,-3.6 0.9,-0.9 0.8,-1.2 -0.7,-1.2 -1,0 -2.7,-0.8 -3.7,-1.7 -1.8,-1.6 -1.9,-1.6 -2.4,0.4 z m 4.3,2.3 c 1.3,0 1.4,0.3 0.6,1.1 -0.6,0.6 -0.9,1.8 -0.6,2.7 0.4,1 0.2,1.3 -0.6,0.8 -0.6,-0.4 -1.7,-0.3 -2.4,0.2 -0.9,0.8 -1.5,0.4 -2.3,-1.3 -0.9,-1.9 -0.9,-2.5 0.2,-2.9 0.8,-0.3 1.4,-1.3 1.4,-2.3 0.1,-1.7 0.1,-1.7 1.1,-0.1 0.5,1 1.7,1.8 2.6,1.8 z"
|
||||||
|
+ id="path175-9"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /></g><path
|
||||||
|
+ d="m 194.4,868.5 c -1.8,1.3 -1.6,1.4 2.5,1.5 3.7,0 4.2,-0.2 3.1,-1.5 -1.6,-1.9 -3.1,-1.9 -5.6,0 z"
|
||||||
|
+ id="path90"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><g
|
||||||
|
+ id="g484-3"
|
||||||
|
+ inkscape:label="paw2"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1"
|
||||||
|
+ transform="matrix(3.2174039,0,0,3.8427558,264.04962,-855.12678)"><path
|
||||||
|
+ d="m 77.733867,236.14477 c -0.4,0.7 -0.5,1.5 -0.2,1.8 0.9,0.9 1.9,-0.4 1.4,-1.8 -0.4,-1.1 -0.6,-1.1 -1.2,0 z"
|
||||||
|
+ id="path169-6"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 73.133867,238.24477 c 0,0.5 0.5,1 1,1 0.6,0 1,-0.5 1,-1 0,-0.6 -0.4,-1 -1,-1 -0.5,0 -1,0.4 -1,1 z"
|
||||||
|
+ id="path171-1"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 81.133867,238.84477 c 0,0.8 0.5,1.2 1,0.9 0.6,-0.3 1,-1 1,-1.6 0,-0.5 -0.4,-0.9 -1,-0.9 -0.5,0 -1,0.7 -1,1.6 z"
|
||||||
|
+ id="path172-2"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 74.733867,241.84477 c -2.1,2 -2.1,2 1.5,3.8 3.5,1.7 4.9,1.4 4.9,-1.3 0,-3.7 -3.7,-5.2 -6.4,-2.5 z"
|
||||||
|
+ id="path176-9"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /><path
|
||||||
|
+ d="m 82.133867,242.24477 c 0,0.5 0.4,1 0.9,1 0.6,0 1.3,-0.5 1.6,-1 0.3,-0.6 -0.1,-1 -0.9,-1 -0.9,0 -1.6,0.4 -1.6,1 z"
|
||||||
|
+ id="path178-3"
|
||||||
|
+ style="fill:#8b95a7;fill-opacity:1;stroke:none;stroke-width:0.1" /></g><g
|
||||||
|
+ id="g107"
|
||||||
|
+ inkscape:label="left"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1"><path
|
||||||
|
+ d="m 779,4.4 c -0.7,2.4 -2.5,5.7 -4.1,7.2 -2.5,2.4 -8.9,13.9 -8.9,16.1 0,0.5 -0.8,2.4 -1.8,4.3 -1.1,1.9 -2.2,4.9 -2.5,6.7 -0.6,2.8 -0.3,3.4 2.7,5.2 2.1,1.3 4.3,4.1 6,7.8 1.6,3.2 3.8,6.9 5,8.3 7.2,8.3 8.5,13.3 4.1,15 -1.5,0.6 -5,2.1 -7.9,3.5 -2.9,1.4 -7.3,2.9 -9.8,3.4 -6.8,1.2 -11.8,4.6 -11.8,8 0,6.3 6.1,7.7 16.3,3.7 5.9,-2.2 11.5,-4.2 23.3,-8 5.8,-1.8 9,-2 9.8,-0.7 1,1.5 -2.1,3.5 -17.7,11.2 -4.2,2.1 -6.2,3.8 -7.4,6.4 -1.6,3.3 -1.5,3.6 0.2,5.5 3.3,3.7 7.3,2.9 28.7,-5.2 1.5,-0.5 3.4,-1.8 4.4,-2.9 2.4,-2.6 4.3,-2.4 7.9,1 3.8,3.7 12.2,5.6 30.5,7.1 7.4,0.6 20.7375,1.125 22.9375,1.625 7.6875,-1.0375 9.56458,-13.251512 9.21875,-1.53125 -0.0877,2.97105 0.5625,-3.28125 -13.85625,-3.09375 -3.19973,0.0416 -9.6,-0.7 -14.3,-1.5 -4.7,-0.8 -11.9,-1.5 -16.1,-1.5 -6,0 -8.5,-0.5 -11.9,-2.3 -6.5,-3.4 -8.3,-6.4 -7.5,-12.2 0.4,-2.6 1.6,-5.6 2.6,-6.6 4.1,-4.1 11.3,-3.2 7.6,0.9 -1.8,2 -2.2,7.8 -0.7,10.2 0.7,1.2 4,1.6 14.7,2.1 7.6,0.3 15.4,1.1 17.3,1.8 2.275,-0.196875 6.26456,0.180958 9.02812,0.63125 9.78125,1.59375 11.62813,0.7375 11.62813,-1.5625 0,-2.2 -7.05625,-3.625 -10.35625,-2.96875 -4.7,-0.1 -14.3,-1 -16.2,-1.6 -1,-0.3 -1.2,-3 -0.9,-12.7 0.4,-11 0.7,-12.6 3.1,-16.8 3,-5.1 11.2,-13.3 15.2,-15.1 13.70312,-3.678125 11.0125,-9.7375 8.8125,-9.7375 -1.7,0 -14.1125,6.8375 -15.0125,8.1375 -0.4,0.7 -1.7,1.8 -2.8,2.4 -3.6,1.9 -11.4,12.6 -12.1,16.3 -0.3,2 -1.3,5.6 -2,8 -0.9,2.7 -1.3,6.8 -1.1,10.7 0.3,3.7 0,6.7 -0.6,7.3 -1.3,1.3 -11.6,1.4 -13.6,0.2 -0.9,-0.6 -1.2,-2.5 -1,-6.2 0.2,-3 0,-6 -0.4,-6.7 -1.2,-1.8 -8.8,-1.4 -12.2,0.7 -3.4,2 -6.6,2.8 -17.1,4.1 -3.9,0.4 -9.3,1.5 -12,2.3 -2.7,0.9 -9.9,3.2 -16.1,5.1 -10.1,3.3 -14.3,3.7 -14.3,1.6 0,-1.5 2.8,-3.1 9.6,-5.4 10.3,-3.5 21.4,-8.9 21.9,-10.7 0.9,-2.7 -2.2,-9.5 -7.8,-17.1 -8.4,-11.4 -9.2,-13.2 -9.1,-21.8 0,-8.7 2.8,-15.2 9.4,-22.4 2.7,-2.9 4.1,-5.5 4.6,-8.4 0.6,-4 0.5,-4.2 -1.8,-4.2 -2.1,0 -2.7,0.7 -3.8,4.4 z m 32.3,81.8 c -0.3,2.9 -1.1,6.2 -1.8,7.3 -2.5,4 -27.4,14 -29.5,11.9 -1.9,-1.9 0.2,-4.6 5.4,-7.1 10.7,-5.1 21.5,-12.2 23.4,-15.2 2.1,-3.6 3.1,-2.4 2.5,3.1 z"
|
||||||
|
+ id="path4"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1"
|
||||||
|
+ sodipodi:nodetypes="ccsccccccscscccccccccccssssccsccccsscccccscccccscccccccsccscccscccsccc" /><path
|
||||||
|
+ d="m 796.7,4 c 1.7,2.5 3.4,4 4.7,4.1 1.2,0 8.2,0 15.6,-0.1 l 13.5,-0.1 3.3,-3.1 C 835.5,3 837,1.2 837,0.8 837,0.4 835.4,0 833.5,0 831.1,0 830,0.5 830,1.4 c 0,2 -6.6,2.9 -18.5,2.4 C 803.7,3.6 801.6,3.2 800.6,1.7 799.9,0.8 798.1,0 796.7,0 h -2.6 z"
|
||||||
|
+ id="path5"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 845,1 c 0,3.6 2.7,12 4.7,14.7 3.2,4.1 4.8,4.6 13.3,3.7 6.5,-0.6 10.7824,-0.749957 11.21875,-2.90625 C 874.96875,12.7875 869.7,14 862.5,14 853.7,14 851.9,12.7 849.9,4.9 849,1.3 848.1,0 846.8,0 845.8,0 845,0.4 845,1 Z"
|
||||||
|
+ id="path6"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1"
|
||||||
|
+ sodipodi:nodetypes="sccsscss" /><path
|
||||||
|
+ d="m 779.5,26 c -0.8,1.3 1.2,4.8 3.5,6 2.8,1.5 7.6,1.2 9,-0.5 1.8,-2.1 0.4,-4.8 -2.1,-4.2 -1.1,0.3 -3.8,-0.1 -6,-0.8 -2.2,-0.8 -4.1,-1 -4.4,-0.5 z"
|
||||||
|
+ id="path8"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 830,30.1 c 0,1.5 1.2,3.2 3.2,4.6 2.9,2 3.3,2.1 6,0.7 1.5,-0.8 2.9,-1.9 3,-2.4 0.4,-3.2 0.1,-3.5 -3.7,-3.6 -2.2,-0.1 -5,-0.5 -6.2,-0.9 -2,-0.6 -2.3,-0.4 -2.3,1.6 z"
|
||||||
|
+ id="path9"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 809.4,33.1 c -1,1.7 2.3,4.6 3.7,3.2 0.7,-0.7 0.9,-1.9 0.6,-2.7 -0.7,-1.8 -3.3,-2.1 -4.3,-0.5 z"
|
||||||
|
+ id="path10"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m 851.5,35.1 c -1,1.6 0.3,5.6 2,6.3 2.3,0.8 4.5,-0.4 5.1,-3 0.8,-3.2 -0.2,-4.4 -3.6,-4.4 -1.6,0 -3.2,0.5 -3.5,1.1 z"
|
||||||
|
+ id="path11"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /></g><g
|
||||||
|
+ id="g106-5"
|
||||||
|
+ transform="translate(4.85616,-2.0112115)"
|
||||||
|
+ style="display:inline;fill:#8b95a7;fill-opacity:1"
|
||||||
|
+ inkscape:label="right2"><path
|
||||||
|
+ d="m -27.33033,-5.908252 c -2.6,1.5 -2.2,4.9 0.7,4.9 2.6,0 3.6,2.1 3.6,8.1999996 0,4.2000004 3,9.9000004 6.5,12.2000004 2,1.3 4.9,1.5 18.2000001,1 14.9999999,-0.5 16.1999999,-0.4 24.0999999,2 10.6,3.2 14.2,5.5 19.6,12.2 10.6,12.9 12.4,31.7 4.9,49.4 -1.3,3.1 -9.2,17.000002 -9.7,17.000002 -0.1,0 -4,1.6 -8.6,3.6 -8.2,3.5 -8.104505,3.00338 -19.37868,2.40676 -3.3607341,-0.89437 -7.3357849,0.68908 -13.8529656,0.57475 -1.2,-0.6 -9.8871044,-0.39404 -15.1871044,-0.89401 -12.9,-1.2 -12.58125,-2.9875 -12.58125,-0.6875 0,1.4 0.9,2.1 3.8,2.5 2,0.4 5.645299,0.48082 8.102252,1.46742 2.4125,0.96875 12.177253,2.16229 24.9914981,1.68883 22.1848629,-0.81969 26.4062499,-1.45625 33.9062499,-7.05625 4.2,-3 9.2,-8.600001 9.2,-10.100001 0,-0.3 1,-2.2 2.3,-4.300001 3.9,-6.2 5.7,-15 5.7,-27.3 0,-13.4 -1.6,-19.6 -7.2,-27.9 -10,-15.1 -25.6,-21 -51.79999988,-19.5 -15.00000012,0.8 -14.70000012,1 -18.80000012,-11.5000002 -2.9,-8.7999998 -5.3,-11.6999999 -8.5,-9.8999998 z"
|
||||||
|
+ id="path7-4"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1"
|
||||||
|
+ sodipodi:nodetypes="csscccccsccccscsscscscccc" /><path
|
||||||
|
+ d="m -29.03033,33.591748 c 0,3.1 2.3,2.8 2.8,-0.4 0.2,-1.5 -0.2,-2.2 -1.2,-2.2 -1.1,0 -1.6,0.9 -1.6,2.6 z"
|
||||||
|
+ id="path22-7"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m -15.93033,37.091748 c -1.8,2.5 -2,3.3 -1,4.5 0.7,0.8 2.4,1.4 3.8,1.2 2.1,-0.2 2.7,-0.9 2.9,-3.5 0.2,-2.3 -0.2,-3.4 -1.6,-4.2 -1.6,-0.8 -2.3,-0.5 -4.1,2 z"
|
||||||
|
+ id="path23-6"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1" /><path
|
||||||
|
+ d="m -0.11157988,38.941748 c -0.7,0.7 -6.78437502,0.534375 -9.35312502,5.51875 -11.8000001,7.9 -14.4656251,19.63125 -15.0656251,37.03125 -0.3,7.9 -0.6,9.1 -2.4,10.000001 -1.2,0.5 -2.1,1.5 -2.1,2.1 0,1.4 18.670796,5.393243 32.5719224,6.225826 C 12.741593,100.21758 16.06967,98.69175 18.86967,97.29175 c 1.9,-1.000001 3.6,-2.400001 3.9,-3.100001 0.4,-1.4 -3.333709,-2.362913 -4.233709,-0.862913 -1.1,1.8 -23.7753006,0.205632 -31.734835,0.525826 l -6.331456,-2.462913 -0.3,-8.500001 c -0.2,-6.8 0.2,-9.9 2.1,-15.5 3.5,-10.2 6.410501,-17.654664 16.4105013,-22.454664 8.3,-3.9 14.2894987,-1.745336 19.0894987,0.454639 4.6,2.1 9.7,2.5 9.7,0.9 0,-0.7 -1.5,-2.4 -3.4,-3.8 -3.2,-2.3 -3.603125,-3.953125 -12.303125,-3.953125 -6.3999999,0 -11.07812488,-0.396875 -11.87812488,0.403125 z"
|
||||||
|
+ id="path24-5"
|
||||||
|
+ style="fill:#8b95a7;stroke:none;stroke-width:0.1;fill-opacity:1"
|
||||||
|
+ sodipodi:nodetypes="scccsccccccccccscsss" /></g></g></g>
|
||||||
|
+</svg>
|
||||||
|
|||||||
@@ -1,3 +1,14 @@
|
|||||||
|
--- a/pgyvpn/Makefile
|
||||||
|
+++ b/pgyvpn/Makefile
|
||||||
|
@@ -67,7 +67,6 @@ ifeq ($(ARCH),x86_64)
|
||||||
|
OPENSSL_COMPAT_TARGET:=linux-x86_64
|
||||||
|
endif
|
||||||
|
|
||||||
|
-PKG_FLAGS:=nonshared
|
||||||
|
PKG_MAINTAINER:=Oray <developer@oray.com>
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
--- a/luci-app-easytier/Makefile
|
--- a/luci-app-easytier/Makefile
|
||||||
+++ b/luci-app-easytier/Makefile
|
+++ b/luci-app-easytier/Makefile
|
||||||
@@ -10,7 +10,7 @@ PKG_VERSION:=2.3.0
|
@@ -10,7 +10,7 @@ PKG_VERSION:=2.3.0
|
||||||
@@ -33,17 +44,6 @@
|
|||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
--- a/pgyvpn/Makefile
|
|
||||||
+++ b/pgyvpn/Makefile
|
|
||||||
@@ -36,7 +36,6 @@ PKG_SOURCE:=pgyvpnsvr
|
|
||||||
PKG_SOURCE_URL:=https://mirrors.oray.com/orayos/packages/$(PKG_NAME)/$(PKG_ARCH_PGYYPN)/$(PKG_VERSION)/bin
|
|
||||||
PKG_HASH:=skip
|
|
||||||
|
|
||||||
-PKG_FLAGS:=nonshared
|
|
||||||
PKG_MAINTAINER:=Oray <developer@oray.com>
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
--- a/luci-app-rclone/Makefile
|
--- a/luci-app-rclone/Makefile
|
||||||
+++ b/luci-app-rclone/Makefile
|
+++ b/luci-app-rclone/Makefile
|
||||||
@@ -9,7 +9,7 @@ PKG_VERSION:=1.4.1
|
@@ -9,7 +9,7 @@ PKG_VERSION:=1.4.1
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
--- a/oscam/files/oscam.init
|
|
||||||
+++ b/oscam/files/oscam.init
|
|
||||||
@@ -8,5 +8,5 @@ start() {
|
|
||||||
}
|
|
||||||
|
|
||||||
stop() {
|
|
||||||
- killall oscam
|
|
||||||
+ kill `pidof oscam | sed "s/$$//g"`
|
|
||||||
}
|
|
||||||
|
|
||||||
--- a/totd/root/etc/init.d/totd
|
--- a/totd/root/etc/init.d/totd
|
||||||
+++ b/totd/root/etc/init.d/totd
|
+++ b/totd/root/etc/init.d/totd
|
||||||
@@ -55,5 +55,5 @@ start_service(){
|
@@ -55,5 +55,5 @@ start_service(){
|
||||||
|
|||||||
@@ -240,7 +240,7 @@
|
|||||||
@@ -825,7 +825,7 @@ for k, v in pairs(nodes_table) do
|
@@ -825,7 +825,7 @@ for k, v in pairs(nodes_table) do
|
||||||
end
|
end
|
||||||
|
|
||||||
m:appendTemplate("/global/footer", {shunt_list = api.jsonc.stringify(shunt_list)})
|
m:appendTemplate("/global/footer")
|
||||||
-
|
-
|
||||||
+m:appendTemplate("/global/status_bottom")
|
+m:appendTemplate("/global/status_bottom")
|
||||||
m:appendTemplate("/cbi/sortable", {sectiontype = s2.sectiontype})
|
m:appendTemplate("/cbi/sortable", {sectiontype = s2.sectiontype})
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
@@ -383,7 +383,7 @@ for k, v in pairs(nodes_table) do
|
@@ -383,7 +383,7 @@ for k, v in pairs(nodes_table) do
|
||||||
end
|
end
|
||||||
|
|
||||||
m:appendTemplate("/global/footer", {shunt_list = api.jsonc.stringify(shunt_list)})
|
m:appendTemplate("/global/footer")
|
||||||
-
|
-
|
||||||
+m:appendTemplate("/global/status_bottom")
|
+m:appendTemplate("/global/status_bottom")
|
||||||
m:appendTemplate("/cbi/sortable", {sectiontype = s2.sectiontype})
|
m:appendTemplate("/cbi/sortable", {sectiontype = s2.sectiontype})
|
||||||
|
|||||||
@@ -8,21 +8,6 @@
|
|||||||
+ option wallpaper 'pattern'
|
+ option wallpaper 'pattern'
|
||||||
+ option layout 'sidebar'
|
+ option layout 'sidebar'
|
||||||
+ option autocollapse 'on'
|
+ option autocollapse 'on'
|
||||||
|
|
||||||
--- a/luci-theme-footstrap/styles/02-tokens.css
|
|
||||||
+++ b/luci-theme-footstrap/styles/02-tokens.css
|
|
||||||
@@ -19,6 +19,11 @@
|
|
||||||
* friends) live in those blocks too, beside the fills they must be legible against: a
|
|
||||||
* dark palette has light fills and needs a dark ink, and one global `#fff` failed WCAG AA
|
|
||||||
* on seven of the eight dark-palette fills (down to 1.69:1). */
|
|
||||||
+ --card-bg-color: var(--fs-panel) !important;
|
|
||||||
+ --border-color: var(--fs-border) !important;
|
|
||||||
+ --app-container_title-color: var(--fs-text) !important;
|
|
||||||
+ --item-label_key-span-color: var(--app-container_title-color) !important;
|
|
||||||
+ --app-container_status-label_block: var(--app-container_title-color) !important;
|
|
||||||
--fs-shadow: 0 1px 3px rgba(15,23,37,.08);
|
|
||||||
/* pop surfaces (menus, dropdown lists, the select picker): one value rather than a
|
|
||||||
* literal per site */
|
|
||||||
diff --git a/luci-theme-footstrap/root/etc/footstrap/pattern.svg b/luci-theme-footstrap/root/etc/footstrap/pattern.svg
|
diff --git a/luci-theme-footstrap/root/etc/footstrap/pattern.svg b/luci-theme-footstrap/root/etc/footstrap/pattern.svg
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000..72eb03cdc
|
index 000000000..72eb03cdc
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
--- a/luci-app-mosdns/root/etc/hotplug.d/iface/99-mosdns
|
|
||||||
+++ b/luci-app-mosdns/root/etc/hotplug.d/iface/99-mosdns
|
|
||||||
@@ -1,2 +1,2 @@
|
|
||||||
#!/bin/sh
|
|
||||||
-[ "$ACTION" = ifup ] && /etc/init.d/mosdns restart
|
|
||||||
+[[ "$ACTION" = ifup && "$(uci -q get mosdns.mosdns.enabled)" == 1 ]] && /etc/init.d/mosdns restart
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
--- a/pgyvpn/Makefile
|
|
||||||
+++ b/pgyvpn/Makefile
|
|
||||||
@@ -78,7 +78,7 @@ define Package/pgyvpn/install
|
|
||||||
$(INSTALL_DIR) $(1)/usr/sbin
|
|
||||||
$(INSTALL_DIR) $(1)/usr/share/pgyvpn
|
|
||||||
|
|
||||||
- $(CP) $(PKG_BUILD_DIR)/{pgyvpn_oraysl,pgyvpnsvr} $(1)/usr/sbin
|
|
||||||
+ $(CP) $(PKG_BUILD_DIR)/pgyvpn_oraysl $(1)/usr/sbin
|
|
||||||
$(INSTALL_BIN) ./files/etc/init.d/* $(1)/etc/init.d
|
|
||||||
$(INSTALL_CONF) ./files/etc/config/* $(1)/etc/config
|
|
||||||
$(INSTALL_BIN) ./files/etc/hotplug.d/iface/* $(1)/etc/hotplug.d/iface
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
@@ -33,6 +33,13 @@ LUCI_DEPENDS:= \
|
@@ -33,6 +33,13 @@ LUCI_DEPENDS:= \
|
||||||
+libuci-lua +lua +luci-compat +coreutils +coreutils-base64 +dns2tcp +dnsmasq-full \
|
+libuci-lua +lua +luci-compat +coreutils +coreutils-base64 +dns2tcp +dnsmasq-full \
|
||||||
+jq +ip-full +lua-neturl +libuci-lua +microsocks +ipt2socks +lyaml \
|
+jq +ip-full +lua-neturl +libuci-lua +microsocks +ipt2socks +lyaml \
|
||||||
+resolveip +curl +nping +unzip +xz-utils +xz \
|
+resolveip +bind-dig +curl +nping +unzip +xz-utils +xz \
|
||||||
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray-core \
|
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray-core \
|
||||||
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:coreutils-timeout \
|
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:coreutils-timeout \
|
||||||
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Http_Proxy:3proxy \
|
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Http_Proxy:3proxy \
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ jobs:
|
|||||||
(
|
(
|
||||||
git_clone https://github.com/Openwrt-Passwall/openwrt-passwall && mvdir openwrt-passwall
|
git_clone https://github.com/Openwrt-Passwall/openwrt-passwall && mvdir openwrt-passwall
|
||||||
git_clone https://github.com/Openwrt-Passwall/openwrt-passwall-packages && mvdir openwrt-passwall-packages
|
git_clone https://github.com/Openwrt-Passwall/openwrt-passwall-packages && mvdir openwrt-passwall-packages
|
||||||
git_clone https://github.com/sbwml/luci-app-mosdns openwrt-mos && mv -n openwrt-mos/{*mosdns,v2dat} ./; rm -rf openwrt-mos
|
git_clone https://github.com/sbwml/luci-app-mosdns openwrt-mos && mv -n openwrt-mos/{*mosdns,geo2txt} ./; rm -rf openwrt-mos
|
||||||
git_clone https://github.com/Lienol/openwrt-package liep && rm -rf liep/other
|
git_clone https://github.com/Lienol/openwrt-package liep && rm -rf liep/other
|
||||||
git_clone https://github.com/rufengsuixing/luci-app-autoipsetadder
|
git_clone https://github.com/rufengsuixing/luci-app-autoipsetadder
|
||||||
git_clone https://github.com/NateLol/luci-app-beardropper
|
git_clone https://github.com/NateLol/luci-app-beardropper
|
||||||
@@ -130,7 +130,7 @@ jobs:
|
|||||||
git_clone https://github.com/sirpdboy/luci-app-poweroffdevice poweroffdevice && mvdir poweroffdevice
|
git_clone https://github.com/sirpdboy/luci-app-poweroffdevice poweroffdevice && mvdir poweroffdevice
|
||||||
git_clone https://github.com/sirpdboy/luci-app-watchdog watchdog1 && mvdir watchdog1
|
git_clone https://github.com/sirpdboy/luci-app-watchdog watchdog1 && mvdir watchdog1
|
||||||
git_clone https://github.com/sirpdboy/luci-app-cupsd cupsd1 && mv -n cupsd1/{luci-app-cupsd,cups} ./ ; rm -rf cupsd1
|
git_clone https://github.com/sirpdboy/luci-app-cupsd cupsd1 && mv -n cupsd1/{luci-app-cupsd,cups} ./ ; rm -rf cupsd1
|
||||||
git_clone https://github.com/sirpdboy/luci-app-timecontrol timecontrol && mvdir timecontrol
|
# git_clone https://github.com/sirpdboy/luci-app-timecontrol timecontrol && mvdir timecontrol
|
||||||
git_clone https://github.com/sirpdboy/luci-theme-kucat
|
git_clone https://github.com/sirpdboy/luci-theme-kucat
|
||||||
git_clone https://github.com/sirpdboy/luci-app-kucat-config
|
git_clone https://github.com/sirpdboy/luci-app-kucat-config
|
||||||
git_clone https://github.com/sirpdboy/luci-app-chatgpt-web
|
git_clone https://github.com/sirpdboy/luci-app-chatgpt-web
|
||||||
@@ -152,6 +152,7 @@ jobs:
|
|||||||
git_clone https://github.com/Tencent-Cloud-Plugins/tencentcloud-openwrt-plugin-cos && mv -n tencentcloud-openwrt-plugin-cos/tencentcloud_cos ./luci-app-tencentcloud-cos; rm -rf tencentcloud-openwrt-plugin-cos
|
git_clone https://github.com/Tencent-Cloud-Plugins/tencentcloud-openwrt-plugin-cos && mv -n tencentcloud-openwrt-plugin-cos/tencentcloud_cos ./luci-app-tencentcloud-cos; rm -rf tencentcloud-openwrt-plugin-cos
|
||||||
git_clone https://github.com/doushang/luci-app-shortcutmenu luci-shortcutmenu && mv -n luci-shortcutmenu/luci-app-shortcutmenu ./ ; rm -rf luci-shortcutmenu
|
git_clone https://github.com/doushang/luci-app-shortcutmenu luci-shortcutmenu && mv -n luci-shortcutmenu/luci-app-shortcutmenu ./ ; rm -rf luci-shortcutmenu
|
||||||
git_clone https://github.com/aa65535/openwrt-dist-luci
|
git_clone https://github.com/aa65535/openwrt-dist-luci
|
||||||
|
git_clone https://github.com/minicom365/openwrt-smart-reboot && mv -f openwrt-smart-reboot/*smart-reboot ./;rm -rf openwrt-smart-reboot
|
||||||
# git_clone https://github.com/morytyann/OpenWrt-msd && mvdir OpenWrt-msd
|
# git_clone https://github.com/morytyann/OpenWrt-msd && mvdir OpenWrt-msd
|
||||||
# git_clone https://github.com/messense/aliyundrive-webdav aliyundrive && mv -n aliyundrive/openwrt/* ./ ; rm -rf aliyundrive
|
# git_clone https://github.com/messense/aliyundrive-webdav aliyundrive && mv -n aliyundrive/openwrt/* ./ ; rm -rf aliyundrive
|
||||||
# git_clone https://github.com/sbilly/netmaker-openwrt && mv -n netmaker-openwrt/netmaker ./; rm -rf netmaker-openwrt
|
# git_clone https://github.com/sbilly/netmaker-openwrt && mv -n netmaker-openwrt/netmaker ./; rm -rf netmaker-openwrt
|
||||||
@@ -176,6 +177,7 @@ jobs:
|
|||||||
git_clone https://github.com/nikkinikki-org/OpenWrt-momo && mv -f OpenWrt-momo/{luci-app-momo,momo} ./;rm -rf OpenWrt-momo
|
git_clone https://github.com/nikkinikki-org/OpenWrt-momo && mv -f OpenWrt-momo/{luci-app-momo,momo} ./;rm -rf OpenWrt-momo
|
||||||
git_clone https://github.com/fcshark-org/openwrt-fchomo && mvdir openwrt-fchomo
|
git_clone https://github.com/fcshark-org/openwrt-fchomo && mvdir openwrt-fchomo
|
||||||
git clone https://github.com/fw876/helloworld -b dev && mvdir helloworld
|
git clone https://github.com/fw876/helloworld -b dev && mvdir helloworld
|
||||||
|
git_clone https://github.com/umk0/openwrt-luci-haproxy-manager && mv -f openwrt-luci-haproxy-manager/luci-app-haproxy-manager ./;rm -rf openwrt-luci-haproxy-manager
|
||||||
) &
|
) &
|
||||||
(
|
(
|
||||||
git_clone https://github.com/ZeaKyX/speedtest-web
|
git_clone https://github.com/ZeaKyX/speedtest-web
|
||||||
@@ -193,6 +195,7 @@ jobs:
|
|||||||
git_clone https://github.com/peter-tank/luci-app-dnscrypt-proxy2
|
git_clone https://github.com/peter-tank/luci-app-dnscrypt-proxy2
|
||||||
git_clone https://github.com/sundaqiang/openwrt-packages && mv -n openwrt-packages/luci-* ./; rm -rf openwrt-packages
|
git_clone https://github.com/sundaqiang/openwrt-packages && mv -n openwrt-packages/luci-* ./; rm -rf openwrt-packages
|
||||||
git_clone https://github.com/CHN-beta/rkp-ipid
|
git_clone https://github.com/CHN-beta/rkp-ipid
|
||||||
|
git_clone https://github.com/lucas-albers-lz4/fwlive && mv -f fwlive/openwrt-feed/luci-app-fwlive ./;rm -rf fwlive
|
||||||
git_clone https://github.com/2018nuoyan/openwrt_nezha && mv -n openwrt_nezha/*nezhav1 ./; rm -rf openwrt_nezha
|
git_clone https://github.com/2018nuoyan/openwrt_nezha && mv -n openwrt_nezha/*nezhav1 ./; rm -rf openwrt_nezha
|
||||||
git clone https://github.com/Ausaci/luci-app-nat6-helper -b main-dev
|
git clone https://github.com/Ausaci/luci-app-nat6-helper -b main-dev
|
||||||
git_clone https://github.com/vernesong/OpenClash && mv -f OpenClash/luci-app-openclash ./; rm -rf OpenClash
|
git_clone https://github.com/vernesong/OpenClash && mv -f OpenClash/luci-app-openclash ./; rm -rf OpenClash
|
||||||
@@ -207,6 +210,7 @@ jobs:
|
|||||||
git_clone https://github.com/xptsp/luci-app-squid-adv
|
git_clone https://github.com/xptsp/luci-app-squid-adv
|
||||||
git_clone https://github.com/xptsp/openwrt-e2guardian
|
git_clone https://github.com/xptsp/openwrt-e2guardian
|
||||||
git_clone https://github.com/10000ge10000/luci-app-openclaw
|
git_clone https://github.com/10000ge10000/luci-app-openclaw
|
||||||
|
git_clone https://github.com/WROIATE/luci-app-hijpass
|
||||||
) &
|
) &
|
||||||
(
|
(
|
||||||
git_clone https://github.com/honwen/luci-app-shadowsocks-rust
|
git_clone https://github.com/honwen/luci-app-shadowsocks-rust
|
||||||
@@ -241,6 +245,7 @@ jobs:
|
|||||||
git_sparse_clone master "https://github.com/coolsnowwolf/lede" package/lean package/network/services/shellsync package/qca/shortcut-fe
|
git_sparse_clone master "https://github.com/coolsnowwolf/lede" package/lean package/network/services/shellsync package/qca/shortcut-fe
|
||||||
git_clone https://github.com/linkease/istore-packages
|
git_clone https://github.com/linkease/istore-packages
|
||||||
git clone https://github.com/laipeng668/luci-app-gecoosac gecoosac1 && mvdir gecoosac1
|
git clone https://github.com/laipeng668/luci-app-gecoosac gecoosac1 && mvdir gecoosac1
|
||||||
|
git_clone https://github.com/eamonxg/luci-theme-shadcn
|
||||||
) &
|
) &
|
||||||
(
|
(
|
||||||
git_clone https://github.com/muink/luci-app-dnsproxy
|
git_clone https://github.com/muink/luci-app-dnsproxy
|
||||||
@@ -269,7 +274,7 @@ jobs:
|
|||||||
git_clone https://github.com/gSpotx2f/luci-app-interfaces-statistics
|
git_clone https://github.com/gSpotx2f/luci-app-interfaces-statistics
|
||||||
git_clone https://github.com/gSpotx2f/luci-app-cpu-status-mini
|
git_clone https://github.com/gSpotx2f/luci-app-cpu-status-mini
|
||||||
git_clone https://github.com/gSpotx2f/luci-app-cpu-status
|
git_clone https://github.com/gSpotx2f/luci-app-cpu-status
|
||||||
git_clone https://github.com/Carseason/openwrt-packages Carseason1 && mv -n Carseason1/*/* ./;mv services/* ./;rm -rf Carseason1 services
|
git_clone https://github.com/Carseason/openwrt-packages Carseason1 && mv -n Carseason1/*/* ./;rm -rf Carseason1
|
||||||
git_clone https://github.com/Carseason/openwrt-themedog && mv -n openwrt-themedog/luci/* ./;rm -rf openwrt-themedog
|
git_clone https://github.com/Carseason/openwrt-themedog && mv -n openwrt-themedog/luci/* ./;rm -rf openwrt-themedog
|
||||||
git_clone https://github.com/Carseason/openwrt-app-actions Carseason2 && mv -n Carseason2/applications/* ./;rm -rf Carseason2
|
git_clone https://github.com/Carseason/openwrt-app-actions Carseason2 && mv -n Carseason2/applications/* ./;rm -rf Carseason2
|
||||||
git_clone https://github.com/Thaolga/openwrt-nekobox && mv openwrt-nekobox/luci-* ./;rm -rf openwrt-nekobox
|
git_clone https://github.com/Thaolga/openwrt-nekobox && mv openwrt-nekobox/luci-* ./;rm -rf openwrt-nekobox
|
||||||
@@ -288,7 +293,8 @@ jobs:
|
|||||||
git_clone https://github.com/EkkoG/luci-app-natmap
|
git_clone https://github.com/EkkoG/luci-app-natmap
|
||||||
git_clone https://github.com/yichya/openwrt-hv-tools
|
git_clone https://github.com/yichya/openwrt-hv-tools
|
||||||
git_clone https://github.com/ddimension/openwrt-repo && mv -f openwrt-repo/*wwand* ./;rm -rf openwrt-repo
|
git_clone https://github.com/ddimension/openwrt-repo && mv -f openwrt-repo/*wwand* ./;rm -rf openwrt-repo
|
||||||
# git_clone https://github.com/papagaye744/luci-theme-design
|
git_clone https://github.com/jerrykuku/luci-theme-argon
|
||||||
|
git_clone https://github.com/jerrykuku/luci-app-argon-config
|
||||||
) &
|
) &
|
||||||
(
|
(
|
||||||
git_clone https://github.com/EasyTier/luci-app-easytier luci-app-easytier1 && mvdir luci-app-easytier1
|
git_clone https://github.com/EasyTier/luci-app-easytier luci-app-easytier1 && mvdir luci-app-easytier1
|
||||||
@@ -351,8 +357,9 @@ jobs:
|
|||||||
git_sparse_clone revision https://github.com/Self-Hosting-Group/packages net/miniupnpd
|
git_sparse_clone revision https://github.com/Self-Hosting-Group/packages net/miniupnpd
|
||||||
) &
|
) &
|
||||||
(
|
(
|
||||||
git_sparse_clone frp-toml https://github.com/laipeng668/luci applications/luci-app-frpc
|
git_sparse_clone frp https://github.com/laipeng668/luci applications/luci-app-frpc
|
||||||
git_sparse_clone frp-toml https://github.com/laipeng668/luci applications/luci-app-frps
|
git_sparse_clone frp https://github.com/laipeng668/luci applications/luci-app-frps
|
||||||
|
git_sparse_clone frp https://github.com/laipeng668/packages net/frp
|
||||||
) &
|
) &
|
||||||
(
|
(
|
||||||
git_sparse_clone master "https://github.com/coolsnowwolf/lede" package/wwan package/lean package/network/services/shellsync package/qca/shortcut-fe && cp -rf wwan/*/* ./ ; rm -Rf wwan
|
git_sparse_clone master "https://github.com/coolsnowwolf/lede" package/wwan package/lean package/network/services/shellsync package/qca/shortcut-fe && cp -rf wwan/*/* ./ ; rm -Rf wwan
|
||||||
@@ -376,10 +383,8 @@ jobs:
|
|||||||
package/utils/mhz package/utils/pcat-manager
|
package/utils/mhz package/utils/pcat-manager
|
||||||
) &
|
) &
|
||||||
(
|
(
|
||||||
npx --yes degit 'dibdot/luci/applications/luci-app-shunt#luci-app-shunt-pr' luci-app-shunt
|
|
||||||
npx --yes degit 'dibdot/packages/net/shunt#shunt-pr' shunt
|
|
||||||
git_sparse_clone master "https://github.com/x-wrt/com.x-wrt" luci-app-macvlan luci-app-xwan
|
git_sparse_clone master "https://github.com/x-wrt/com.x-wrt" luci-app-macvlan luci-app-xwan
|
||||||
git_sparse_clone master "https://github.com/obsy/packages" oscam luci-proto-wwan 3ginfo
|
# git_sparse_clone master "https://github.com/obsy/packages" oscam luci-proto-wwan 3ginfo
|
||||||
git_sparse_clone istoreos-24.10 "https://github.com/jjm2473/packages" utils/dockerd
|
git_sparse_clone istoreos-24.10 "https://github.com/jjm2473/packages" utils/dockerd
|
||||||
git_sparse_clone master "https://github.com/teleofis/teleofis-feed" luci packages; rm -rf luci/luci-app-{pollmydevice,simman*,strongswan,pingcontrol} luci/luci-theme-teleofis; mvdir luci; \
|
git_sparse_clone master "https://github.com/teleofis/teleofis-feed" luci packages; rm -rf luci/luci-app-{pollmydevice,simman*,strongswan,pingcontrol} luci/luci-theme-teleofis; mvdir luci; \
|
||||||
rm -rf packages/{base-files*,*lt70*,cp210x-cfg,fbfdownloader,pollmydevice,simman*,pingcontrol}; mvdir packages
|
rm -rf packages/{base-files*,*lt70*,cp210x-cfg,fbfdownloader,pollmydevice,simman*,pingcontrol}; mvdir packages
|
||||||
@@ -387,13 +392,13 @@ jobs:
|
|||||||
(
|
(
|
||||||
git_sparse_clone develop "https://github.com/Ysurac/openmptcprouter-feeds" \
|
git_sparse_clone develop "https://github.com/Ysurac/openmptcprouter-feeds" \
|
||||||
dsvpn glorytun-udp glorytun grpcurl ipcalc luci-app-dsvpn luci-app-glorytun-tcp luci-app-glorytun-udp luci-app-mail luci-app-mlvpn luci-app-mptcp luci-app-nginx-ha luci-app-sqm-autorate luci-app-packet-capture luci-app-iperf luci-theme-openmptcprouter sqm-autorate speedtestc mlvpn mptcp tcptraceroute tracebox tsping atinout z8102
|
dsvpn glorytun-udp glorytun grpcurl ipcalc luci-app-dsvpn luci-app-glorytun-tcp luci-app-glorytun-udp luci-app-mail luci-app-mlvpn luci-app-mptcp luci-app-nginx-ha luci-app-sqm-autorate luci-app-packet-capture luci-app-iperf luci-theme-openmptcprouter sqm-autorate speedtestc mlvpn mptcp tcptraceroute tracebox tsping atinout z8102
|
||||||
git_sparse_clone chawrt/24.10 "https://github.com/liudf0716/luci" applications/luci-app-yt-dlp applications/luci-app-apfree-wifidog applications/luci-app-ss-redir
|
git_sparse_clone chawrt/25.12 "https://github.com/liudf0716/luci" applications/luci-app-xkcptun applications/luci-app-apfree-wifidog
|
||||||
git_sparse_clone chawrt/24.10 "https://github.com/liudf0716/packages" net/ss-redir
|
git_sparse_clone chawrt/25.12 "https://github.com/liudf0716/packages" net/xkcptun net/apfree-wifidog
|
||||||
) &
|
) &
|
||||||
git_sparse_clone master "https://github.com/immortalwrt/packages" net/n2n net/qbittorrent \
|
git_sparse_clone master "https://github.com/immortalwrt/packages" net/n2n net/qbittorrent \
|
||||||
net/amule net/cdnspeedtest net/minieap net/ddns-go net/sysuh3c net/3proxy net/cloudreve \
|
net/amule net/cdnspeedtest net/minieap net/ddns-go net/sysuh3c net/3proxy utils/filebrowser net/cloudreve \
|
||||||
net/go-nats net/go-wol net/bitsrunlogin-go net/transfer net/udp2raw net/msd_lite \
|
net/go-nats net/go-wol net/bitsrunlogin-go net/transfer net/udp2raw net/msd_lite \
|
||||||
net/subconverter net/ngrokc net/scutclient net/gost net/ua2f net/dufs net/frp net/qBittorrent-Enhanced-Edition \
|
net/subconverter net/ngrokc net/scutclient net/gost net/ua2f net/dufs net/qBittorrent-Enhanced-Edition \
|
||||||
net/tinyportmapper net/nexttrace net/rustdesk-server net/tuic-server net/transmission-web-control \
|
net/tinyportmapper net/nexttrace net/rustdesk-server net/tuic-server net/transmission-web-control \
|
||||||
net/ipset-lists net/ShadowVPN net/nps net/dnsforwarder \
|
net/ipset-lists net/ShadowVPN net/nps net/dnsforwarder \
|
||||||
net/ps3netsrv net/brook net/q \
|
net/ps3netsrv net/brook net/q \
|
||||||
@@ -404,9 +409,9 @@ jobs:
|
|||||||
utils/phicomm-k3screenctrl utils/joker utils/7z utils/dhrystone utils/supervisor utils/tinymembench utils/pcat-mgr utils/fan2go \
|
utils/phicomm-k3screenctrl utils/joker utils/7z utils/dhrystone utils/supervisor utils/tinymembench utils/pcat-mgr utils/fan2go \
|
||||||
utils/coremark utils/watchcat multimedia/you-get multimedia/lux multimedia/gmediarender multimedia/ykdl multimedia/gallery-dl \
|
utils/coremark utils/watchcat multimedia/you-get multimedia/lux multimedia/gmediarender multimedia/ykdl multimedia/gallery-dl \
|
||||||
sound/spotifyd devel/go-rice devel/rust-bindgen admin/gotop \
|
sound/spotifyd devel/go-rice devel/rust-bindgen admin/gotop \
|
||||||
lang/lua/lua-periphery lang/lua/lua-neturl lang/lua/lua-maxminddb lang/golang devel/gn
|
lang/lua/lua-periphery lang/lua/lua-neturl lang/lua/lua-maxminddb lang/golang devel/gn lang/node/node-pnpm
|
||||||
git_clone https://github.com/koshev-msk/modemfeed && mv -n modemfeed/*/!(telephony)/!(ookla-speedtest) ./; rm -rf modemfeed
|
git_clone https://github.com/koshev-msk/modemfeed && mv -n modemfeed/*/!(telephony)/!(ookla-speedtest) ./; rm -rf modemfeed
|
||||||
git_sparse_clone openwrt-25.12 "https://github.com/immortalwrt/luci" applications collections/luci-nginx protocols/luci-proto-minieap protocols/luci-proto-quectel themes/luci-theme-argon
|
git_sparse_clone openwrt-25.12 "https://github.com/immortalwrt/luci" applications collections/luci-nginx protocols/luci-proto-minieap protocols/luci-proto-quectel
|
||||||
mv -f applications luciapp && rm -rf luciapp/luci-app-firewall
|
mv -f applications luciapp && rm -rf luciapp/luci-app-firewall
|
||||||
git_sparse_clone openwrt-25.12 "https://github.com/coolsnowwolf/luci" applications \
|
git_sparse_clone openwrt-25.12 "https://github.com/coolsnowwolf/luci" applications \
|
||||||
modules/luci-base modules/luci-mod-network modules/luci-mod-status modules/luci-mod-system protocols/luci-proto-openvpnc themes/luci-theme-design
|
modules/luci-base modules/luci-mod-network modules/luci-mod-status modules/luci-mod-system protocols/luci-proto-openvpnc themes/luci-theme-design
|
||||||
@@ -424,7 +429,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
set +e
|
set +e
|
||||||
mv -n luciapp/!(luci-app-noddos|luci-app-filebrowser-go|luci-app-openvpn-server|luci-app-chrony|luci-app-kodexplorer|luci-app-cshark|luci-app-dnscrypt-proxy|luci-app-https-dns-proxy|luci-app-ssr-mudb-server|luci-app-ledtrig-*|luci-app-antiblock) ./ ; rm -Rf luciapp
|
mv -n luciapp/!(luci-app-noddos|luci-app-openvpn-server|luci-app-chrony|luci-app-kodexplorer|luci-app-cshark|luci-app-dnscrypt-proxy|luci-app-https-dns-proxy|luci-app-ssr-mudb-server|luci-app-ledtrig-*|luci-app-antiblock) ./ ; rm -Rf luciapp
|
||||||
mv -n lean/!(r8101|r8125|r8126|r8168) ./ ; rm -Rf lean
|
mv -n lean/!(r8101|r8125|r8126|r8168) ./ ; rm -Rf lean
|
||||||
mv -n liep/!(luci-app-filebrowser) ./ ; rm -Rf liep
|
mv -n liep/!(luci-app-filebrowser) ./ ; rm -Rf liep
|
||||||
mv -n istore-packages/!(qBittorrent*|luci-app-qbittorrent-ee|baidupcs-web|luci-app-LingTiGameAcc|inter_i40e) ./;rm -rf istore-packages
|
mv -n istore-packages/!(qBittorrent*|luci-app-qbittorrent-ee|baidupcs-web|luci-app-LingTiGameAcc|inter_i40e) ./;rm -rf istore-packages
|
||||||
@@ -464,7 +469,7 @@ jobs:
|
|||||||
-H "Authorization: Bearer ${{ secrets.TOKEN_KIDDIN9 }}" \
|
-H "Authorization: Bearer ${{ secrets.TOKEN_KIDDIN9 }}" \
|
||||||
-X POST -d '{ "query": "query {repository(owner: \"'"$1"'\", name: \"'"$2"'\"){latestRelease{tagName tagCommit{oid}}refs(refPrefix:\"refs/tags/\",last:1,orderBy:{field:TAG_COMMIT_DATE,direction:ASC}){edges{node{name target{oid}}}}defaultBranchRef{target{...on Commit {oid}}}}}"}' https://api.github.com/graphql)
|
-X POST -d '{ "query": "query {repository(owner: \"'"$1"'\", name: \"'"$2"'\"){latestRelease{tagName tagCommit{oid}}refs(refPrefix:\"refs/tags/\",last:1,orderBy:{field:TAG_COMMIT_DATE,direction:ASC}){edges{node{name target{oid}}}}defaultBranchRef{target{...on Commit {oid}}}}}"}' https://api.github.com/graphql)
|
||||||
}
|
}
|
||||||
for pkg in $(ls !(luci-*|nikki|mihomo*|openwrt-einat-ebpf|qBittorrent-Enhanced-Edition|tuic-client|glorytun|dae|daed|shadowsocks-libev|mosdns|spotifyd|miniupnpd|openwrt-Toolkit|libdouble-conversion|wxbase|3proxy|ucode|mergerfs|openwrt-nezhav1|homebox|sub-web|tcptraceroute|frp|openwrt-caddy|mentohust|brlaser|rapidjson|smartdns|hysteria|gecoosac|libcryptopp|naiveproxy|rustdesk-server|shadowsocksr-libev|tuic-server|joker|ps3netsrv|natter|netmaker|openwrt-ympd|subconverter|sms-tool)/Makefile); do
|
for pkg in $(ls !(luci-*|nikki|mihomo*|dockermanager|kaiplus|fastnet|baidudrive|openwrt-einat-ebpf|qBittorrent-Enhanced-Edition|tuic-client|glorytun|dae|daed|shadowsocks-libev|mosdns|spotifyd|miniupnpd|openwrt-Toolkit|libdouble-conversion|wxbase|3proxy|ucode|mergerfs|openwrt-nezhav1|homebox|sub-web|tcptraceroute|frp|openwrt-caddy|mentohust|brlaser|rapidjson|smartdns|hysteria|gecoosac|libcryptopp|naiveproxy|rustdesk-server|shadowsocksr-libev|tuic-server|joker|ps3netsrv|natter|netmaker|openwrt-ympd|subconverter|sms-tool)/Makefile); do
|
||||||
repo="$(grep ^PKG_SOURCE_URL $pkg | grep github | cut -f 4-5 -d '/' | sed -e 's/.git//' | grep -E '[0-9a-zA-Z_-]+$')" || true
|
repo="$(grep ^PKG_SOURCE_URL $pkg | grep github | cut -f 4-5 -d '/' | sed -e 's/.git//' | grep -E '[0-9a-zA-Z_-]+$')" || true
|
||||||
if [ "$repo" ]; then
|
if [ "$repo" ]; then
|
||||||
owner="$(echo $repo | cut -f 1 -d '/')"
|
owner="$(echo $repo | cut -f 1 -d '/')"
|
||||||
@@ -528,6 +533,9 @@ jobs:
|
|||||||
cp -rf luci-app-bypass/root/www/luci-static/bypass/* luci-app-passwall2/root/www/luci-static/passwall2/
|
cp -rf luci-app-bypass/root/www/luci-static/bypass/* luci-app-passwall2/root/www/luci-static/passwall2/
|
||||||
cp -rf luci-app-bypass/root/www/luci-static/bypass/* luci-app-ssr-plus/root/www/luci-static/shadowsocksr/
|
cp -rf luci-app-bypass/root/www/luci-static/bypass/* luci-app-ssr-plus/root/www/luci-static/shadowsocksr/
|
||||||
echo ".page-container>div>div>a:first-child,.info_content>.status_box{display:none !important}" >>luci-app-quickstart/htdocs/luci-static/quickstart/style.css
|
echo ".page-container>div>div>a:first-child,.info_content>.status_box{display:none !important}" >>luci-app-quickstart/htdocs/luci-static/quickstart/style.css
|
||||||
|
sed -i -e "s/body\[theme=dark\]/:root[data-darkmode=true]/g" \
|
||||||
|
-e "s/body\[theme=light\]/:root[data-darkmode=false]/g" luci-app-quickstart/htdocs/luci-static/quickstart/style.css
|
||||||
|
sed -i 's/body.getAttribute("theme");if(o)switch(o){case"dark":case"light":return o}/documentElement.getAttribute("data-darkmode");if(o)switch(o){case"true":return"dark";case"false":return"light"}/g' luci-app-quickstart/htdocs/luci-static/quickstart/index.js
|
||||||
sed -i 's/icon!=="baby"/icon!==""/' luci-app-quickstart/htdocs/luci-static/quickstart/index.js
|
sed -i 's/icon!=="baby"/icon!==""/' luci-app-quickstart/htdocs/luci-static/quickstart/index.js
|
||||||
sed -i 's/+php8-cgi /+php8-cgi +php8-fpm /' luci-theme-spectra/Makefile
|
sed -i 's/+php8-cgi /+php8-cgi +php8-fpm /' luci-theme-spectra/Makefile
|
||||||
|
|
||||||
|
|||||||
-121
@@ -1,121 +0,0 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
|
||||||
|
|
||||||
PKG_NAME:=3ginfo
|
|
||||||
PKG_VERSION:=20260425
|
|
||||||
PKG_RELEASE:=3
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Package/3ginfo/Default
|
|
||||||
SECTION:=net
|
|
||||||
CATEGORY:=Network
|
|
||||||
TITLE:=Information about the status of the 3G/4G/5G modem
|
|
||||||
MAINTAINER:=Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
PKGARCH:=all
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-old
|
|
||||||
$(call Package/3ginfo/Default)
|
|
||||||
DEPENDS:=+3ginfo-text-old +uhttpd
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-lite
|
|
||||||
$(call Package/3ginfo/Default)
|
|
||||||
TITLE+= (lite version)
|
|
||||||
DEPENDS:=+comgt +@BUSYBOX_DEFAULT_AWK
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-qmisignal
|
|
||||||
$(call Package/3ginfo/Default)
|
|
||||||
TITLE+= (qmi signal)
|
|
||||||
DEPENDS:=+uqmi +uhttpd
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-text-old
|
|
||||||
$(call Package/3ginfo/Default)
|
|
||||||
TITLE+= (text version)
|
|
||||||
DEPENDS:=+comgt
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-text-old/conffiles
|
|
||||||
/etc/config/3ginfo
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo
|
|
||||||
$(call Package/3ginfo/Default)
|
|
||||||
DEPENDS:=+3ginfo-text +uhttpd
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-text
|
|
||||||
$(call Package/3ginfo/Default)
|
|
||||||
TITLE+= (text version)
|
|
||||||
DEPENDS:=+comgt +sms-tool +modemdata
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-text/conffiles
|
|
||||||
/etc/config/3ginfo
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Build/Compile
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-old/install
|
|
||||||
$(CP) ./files-html-old/* $(1)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-lite/install
|
|
||||||
$(CP) ./files-lite/* $(1)
|
|
||||||
$(CP) ./files-text-old/usr/share/3ginfo/mccmnc.dat $(1)/usr/share/3ginfo-lite
|
|
||||||
$(CP) ./files-text-old/usr/share/3ginfo/scripts/probeport.gcom $(1)/usr/share/3ginfo-lite
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-qmisignal/install
|
|
||||||
$(CP) ./files-qmisignal/* $(1)
|
|
||||||
|
|
||||||
$(FIND) $(1) -type f -name '*.js' | while read src; do \
|
|
||||||
uglifyjs "$$$$src" -o "$$$$src".1 && \
|
|
||||||
mv "$$$$src".1 "$$$$src" || true; \
|
|
||||||
done
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-text-old/install
|
|
||||||
$(CP) ./files-text-old/* $(1)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-text-old/postinst
|
|
||||||
#!/bin/sh
|
|
||||||
[ -n "$${IPKG_INSTROOT}" ] || {
|
|
||||||
ln -sf /usr/share/3ginfo/cgi-bin/3ginfo.sh /usr/bin/3ginfo
|
|
||||||
}
|
|
||||||
exit 0
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo/install
|
|
||||||
$(CP) ./files-html/* $(1)
|
|
||||||
|
|
||||||
$(SED) 's/?v=1/?v='${PKG_VERSION}'/g' $(1)/usr/share/3ginfo/html/index.html
|
|
||||||
|
|
||||||
$(SED) 's/^\t*//g;s/^\s*//g;/^$$$$/d' $(1)/usr/share/3ginfo/html/index.html
|
|
||||||
|
|
||||||
$(FIND) $(1) -type f -name '*.js' | while read src; do \
|
|
||||||
uglifyjs "$$$$src" -o "$$$$src".1 && \
|
|
||||||
mv "$$$$src".1 "$$$$src" || true; \
|
|
||||||
done
|
|
||||||
|
|
||||||
$(FIND) $(1) -type f -name '*.css' | while read src; do \
|
|
||||||
cleancss "$$$$src" -o "$$$$src".1 && \
|
|
||||||
mv "$$$$src".1 "$$$$src" || true; \
|
|
||||||
done
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/3ginfo-text/install
|
|
||||||
$(CP) ./files-text/* $(1)
|
|
||||||
endef
|
|
||||||
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,3ginfo-old))
|
|
||||||
$(eval $(call BuildPackage,3ginfo-lite))
|
|
||||||
$(eval $(call BuildPackage,3ginfo-qmisignal))
|
|
||||||
$(eval $(call BuildPackage,3ginfo-text-old))
|
|
||||||
$(eval $(call BuildPackage,3ginfo))
|
|
||||||
$(eval $(call BuildPackage,3ginfo-text))
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
|
|
||||||
# (c) 2010-2019 Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
|
|
||||||
START=99
|
|
||||||
|
|
||||||
start () {
|
|
||||||
PORT=$(uci -q get 3ginfo.@3ginfo[0].http_port)
|
|
||||||
[ -z $PORT ] && { PORT=81; }
|
|
||||||
uhttpd -c /usr/share/3ginfo/uhttpd.conf -h /usr/share/3ginfo/ -p 0.0.0.0:$PORT > /dev/null 2>&1
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
DEVICE=$(uci get 3ginfo.@3ginfo[0].device)
|
|
||||||
SCRIPT=$(uci get 3ginfo.@3ginfo[0].script)
|
|
||||||
|
|
||||||
echo -e "Content-type: text/html\n\n"
|
|
||||||
if [ -e scripts/$SCRIPT.sh ]; then
|
|
||||||
sh scripts/$SCRIPT.sh
|
|
||||||
elif [ -e scripts/$SCRIPT.gcom ]; then
|
|
||||||
if ! pidof gcom > /dev/null; then
|
|
||||||
O=$(gcom -d $DEVICE -s scripts/$SCRIPT.gcom)
|
|
||||||
echo "<div class=\"c\">$O</div>"
|
|
||||||
else
|
|
||||||
echo "<div class=\"c\">Brak możliwości sprawdzenia limitu. Spróbuj za chwilę.</div>"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "<div class=\"c\"><font color=red>Brak skryptu $SCRIPT</font></div>"
|
|
||||||
fi
|
|
||||||
echo "<div class=\"c\"><input type=\"button\" class=\"button\" value=\"Wróć\" onclick=\"trzyginfo('cgi-bin/3ginfo.sh');\"></div>"
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
SEC=$(uci -q get 3ginfo.@3ginfo[0].network)
|
|
||||||
[ -z "$SEC" ] && exit 0
|
|
||||||
|
|
||||||
ALLOW=$(uci -q get 3ginfo.@3ginfo[0].connect_button)
|
|
||||||
[ "x$ALLOW" = "x0" ] && exit 0
|
|
||||||
|
|
||||||
UP=$(ifstatus $SEC | grep "\"up\": true")
|
|
||||||
if [ -n "$UP" ]; then
|
|
||||||
ifdown $SEC > /dev/null 2>&1
|
|
||||||
else
|
|
||||||
ifup $SEC > /dev/null 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep 3
|
|
||||||
exit 0
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
D=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
echo -e "Content-type: text/html\n\n"
|
|
||||||
if [ -e $D ]; then
|
|
||||||
gcom -d $D sig | sed -e 's/ /,/g'
|
|
||||||
fi
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "Content-type: text/html"
|
|
||||||
echo ""
|
|
||||||
echo "
|
|
||||||
<html>
|
|
||||||
<style type=\"text/css\">
|
|
||||||
body {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
}
|
|
||||||
#centered {
|
|
||||||
width: 800px;
|
|
||||||
margin: auto;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.label {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
.text {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
pre {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<head>
|
|
||||||
<title>SMS</title>
|
|
||||||
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
"
|
|
||||||
if [ "$REQUEST_METHOD" = POST ]; then
|
|
||||||
read -t 3 QUERY_STRING
|
|
||||||
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
|
|
||||||
action=`uhttpd -d $action 2>/dev/null`
|
|
||||||
tel=`uhttpd -d $msisdn 2>/dev/null`
|
|
||||||
msg=`uhttpd -d $msg 2>/dev/null`
|
|
||||||
id=`uhttpd -d $id 2>/dev/null`
|
|
||||||
else
|
|
||||||
action="x"
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$action" in
|
|
||||||
send)
|
|
||||||
echo "[global]" > /tmp/gnokiirc
|
|
||||||
echo "model = AT" >> /tmp/gnokiirc
|
|
||||||
echo "port = "$(uci get 3ginfo.@3ginfo[0].device) >> /tmp/gnokiirc
|
|
||||||
echo "connection = serial" >> /tmp/gnokiirc
|
|
||||||
|
|
||||||
echo "$msg" | tr '+' ' ' | gnokii --config /tmp/gnokiirc --sendsms $tel 2>/dev/null
|
|
||||||
R=$?
|
|
||||||
if [ $R -eq 0 ]; then
|
|
||||||
echo "Wysłano wiadomość do $tel!<br />"
|
|
||||||
else
|
|
||||||
echo "<font color=red><strong>Wystąpił problem z wysłaniem wiadomości!</strong></font><br />"
|
|
||||||
fi
|
|
||||||
echo $tel": "$msg >> /tmp/sms.txt
|
|
||||||
rm /tmp/gnokiirc
|
|
||||||
;;
|
|
||||||
delete)
|
|
||||||
echo "[global]" > /tmp/gnokiirc
|
|
||||||
echo "model = AT" >> /tmp/gnokiirc
|
|
||||||
echo "port = "$(uci get 3ginfo.@3ginfo[0].device) >> /tmp/gnokiirc
|
|
||||||
echo "connection = serial" >> /tmp/gnokiirc
|
|
||||||
gnokii --config /tmp/gnokiirc --deletesms SM $id 2>/dev/null
|
|
||||||
rm /tmp/gnokiirc
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<form method=\"post\">
|
|
||||||
<input type=\"hidden\" name=\"action\" id=\"action\" value=\"send\">
|
|
||||||
<div class=label>Numer telefonu:</div><input name=\"msisdn\" class=text><br />
|
|
||||||
<div class=label>Wiadomość:</div><textarea name=\"msg\" class=text></textarea><br /><br />
|
|
||||||
<input type=\"submit\" name=\"submit\" value=\"Wyślij\" text-align=center>
|
|
||||||
</form>
|
|
||||||
"
|
|
||||||
|
|
||||||
echo "[global]" > /tmp/gnokiirc
|
|
||||||
echo "model = AT" >> /tmp/gnokiirc
|
|
||||||
echo "port = "$(uci get 3ginfo.@3ginfo[0].device) >> /tmp/gnokiirc
|
|
||||||
echo "connection = serial" >> /tmp/gnokiirc
|
|
||||||
echo "<pre>"
|
|
||||||
gnokii --config /tmp/gnokiirc --getsms SM 0 end 2>/dev/null | \
|
|
||||||
sed -e ' \
|
|
||||||
s/ (unread)/<\/pre><font color=green><strong>Nowa wiadomość<\/strong><\/font><pre>/g; \
|
|
||||||
s/Msg Center.*//g; \
|
|
||||||
s/(read)//g; \
|
|
||||||
s/^Sender/Nadawca/g;s/Date\/time/Data\/czas/g; \
|
|
||||||
s/^Text:/Treść wiadomości:<\/pre><pre style="white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;">/g; \
|
|
||||||
s/\(^[0-9]*\)..Inbox Message/<\/pre><hr \/><form style="text-align: left;" method="post"><input type="hidden" name="action" id="action" value="delete"><input type="hidden" name="id" id="id" value="\1"><input type="submit" name="submit" value="Usuń"><\/form><pre>/g'
|
|
||||||
rm /tmp/gnokiirc
|
|
||||||
|
|
||||||
echo "</pre>
|
|
||||||
</div>
|
|
||||||
</body></html>"
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "Content-type: text/html"
|
|
||||||
echo ""
|
|
||||||
echo "
|
|
||||||
<html>
|
|
||||||
<style type=\"text/css\">
|
|
||||||
body {
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
}
|
|
||||||
#centered {
|
|
||||||
width: 800px;
|
|
||||||
margin: auto;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.label {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
.text {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
pre {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<head>
|
|
||||||
<title>USSD</title>
|
|
||||||
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
"
|
|
||||||
if [ "$REQUEST_METHOD" = POST ]; then
|
|
||||||
read -t 3 QUERY_STRING
|
|
||||||
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
|
|
||||||
action=`uhttpd -d $action`
|
|
||||||
ussd=`uhttpd -d $ussd`
|
|
||||||
else
|
|
||||||
action="x"
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$action" in
|
|
||||||
send)
|
|
||||||
A=$(ussd159 -p $(uci get 3ginfo.@3ginfo[0].device) -t 30 -u "$ussd")
|
|
||||||
echo "Odpowiedź: $A<br /><br />"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "
|
|
||||||
<form method=\"post\">
|
|
||||||
<input type=\"hidden\" name=\"action\" id=\"action\" value=\"send\">
|
|
||||||
<div class=label>USSD:</div><input name=\"ussd\" class=text><br />
|
|
||||||
<input type=\"submit\" name=\"submit\" value=\"Wyślij\" text-align=center>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</body></html>"
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
<html>
|
|
||||||
<style type="text/css">
|
|
||||||
body {font-family: Verdana, Arial, Helvetica, sans-serif;}
|
|
||||||
.button {width:150px;}
|
|
||||||
a:link {text-decoration:none;color:blue;}
|
|
||||||
a:visited {text-decoration:none;color:blue;}
|
|
||||||
a:active {text-decoration:none;color:blue;}
|
|
||||||
a:hover {text-decoration:underline;color:blue;}
|
|
||||||
.c {margin:auto;text-align:center;clear:both;}
|
|
||||||
.l {width:39%;clear:both;float:left;text-align:right;}
|
|
||||||
.r {width:59%;float:right; text-align:left;}
|
|
||||||
</style>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>3G/4G</title>
|
|
||||||
<script language="javascript" type="text/javascript">
|
|
||||||
function detailson() {
|
|
||||||
document.getElementById('details').style.display = "inline";
|
|
||||||
document.getElementById('details_on').style.display = "none";
|
|
||||||
document.getElementById('details_off').style.display = "inline";
|
|
||||||
}
|
|
||||||
|
|
||||||
function detailsoff() {
|
|
||||||
document.getElementById('details').style.display = "none";
|
|
||||||
document.getElementById('details_on').style.display = "inline";
|
|
||||||
document.getElementById('details_off').style.display = "none";
|
|
||||||
}
|
|
||||||
|
|
||||||
function trzyginfo(zrodlo, reload) {
|
|
||||||
var a;
|
|
||||||
|
|
||||||
try {a = new XMLHttpRequest();} catch (e) {
|
|
||||||
try {a = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {
|
|
||||||
try {a = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {
|
|
||||||
alert("Coś stara ta przelądarka...");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
document.getElementById('loader').style.display = "block";
|
|
||||||
document.getElementById('zawartosc').innerHTML = "";
|
|
||||||
|
|
||||||
a.open("GET", zrodlo);
|
|
||||||
|
|
||||||
a.onreadystatechange = function() {
|
|
||||||
if (a.readyState == 4) {
|
|
||||||
document.getElementById('loader').style.display = "none";
|
|
||||||
document.getElementById('zawartosc').innerHTML = a.responseText;
|
|
||||||
if (reload == 1) {
|
|
||||||
location.reload(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
a.send(null);
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body onload="trzyginfo('cgi-bin/3ginfo.sh',0);">
|
|
||||||
|
|
||||||
<table style='width:100%;height:100%;'>
|
|
||||||
<tr><td colspan=3 style='height:100px;'> </td></tr>
|
|
||||||
<tr>
|
|
||||||
<td> </td>
|
|
||||||
<td style='width:600px; height:200px;'>
|
|
||||||
<div id='zawartosc'></div>
|
|
||||||
<div id='loader' style="text-align:center;display:block;"><img src="loader.gif"></div>
|
|
||||||
</td>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
<tr><td colspan=3> </td></tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</body></html>
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.1 KiB |
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
O=$(wget -q -c http://www.cyfrowypolsat.pl/internet/biezace-zuzycie/ -O -)
|
|
||||||
O1=$(echo "$O" | sed -n '/Okres rozliczeniowy/,/_idJsp27/p' | tr -d '\n' | sed -e 's/\t//g;s/ */ /g;s/.*\(<span class="bolder">Okres.*\)\(<br><br><span\).*/\1/' | tr '\277\363\263\346\352\266\261\274\361' zolcesazn | tr '\241\306\312\243\321\323\246\257\254' ACELNOSZZ)
|
|
||||||
if [ -z "$O1" ]; then
|
|
||||||
echo "<div class=\"c\">Brak możliwości sprawdzenia limitu.</div>"
|
|
||||||
else
|
|
||||||
echo "$O1"
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
pdu2txt() {
|
|
||||||
# pobrany z https://forum.openwrt.org/viewtopic.php?pid=158891#p158891
|
|
||||||
|
|
||||||
data1=$(echo $1 | sed -e 's/.\{2\}/&\ /g')
|
|
||||||
|
|
||||||
ret=''
|
|
||||||
shift=0
|
|
||||||
carry=0
|
|
||||||
|
|
||||||
for byte in $data1; do
|
|
||||||
if [ $shift -eq 7 ]; then
|
|
||||||
ret=$ret$(echo $carry | awk '{printf("%c",$0)}')
|
|
||||||
carry=0
|
|
||||||
shift=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
byte=$((0x$byte))
|
|
||||||
|
|
||||||
: $(( a = (0xFF >> ($shift + 1)) & 0xFF ))
|
|
||||||
: $(( b = $a ^ 0xFF ))
|
|
||||||
|
|
||||||
: $(( digit = $carry | (($byte & $a) << $shift) & 0xFF ))
|
|
||||||
: $(( carry = ($byte & $b) >> (7 - $shift) ))
|
|
||||||
|
|
||||||
ret=$ret$(echo $digit | awk '{printf("%c",$0)}')
|
|
||||||
|
|
||||||
: $(( shift++ ))
|
|
||||||
done
|
|
||||||
|
|
||||||
echo $ret
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"AAD8EC3602\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:noresponse
|
|
||||||
print ""
|
|
||||||
exit 0
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
. /usr/share/3ginfo/scripts/functions.sh
|
|
||||||
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/lycamobile_pdu.gcom | cut -f2 -d\")
|
|
||||||
if [ ! -z "$O" ]; then
|
|
||||||
pdu2txt "$O" | tr '\n' ' ' | sed -e 's/1 Opis 9 Powrot 0 Wyjscie//g'
|
|
||||||
else
|
|
||||||
echo "Problem operatora - brak możliwości sprawdzenia"
|
|
||||||
fi
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT+CNMI=0,1,0,0,0^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "AT+CMGF=1^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "AT+CMGL=\"ALL\"^m"
|
|
||||||
waitfor 10 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"*121#\",15^m"
|
|
||||||
waitfor 5 "+CUSD:"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
let $c="AT+CMGL=\"REC UNREAD\"^m"
|
|
||||||
let $r="+CMGL"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+CMGL=\"REC UNREAD\"^m"
|
|
||||||
let $r="+CMGL"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
:error
|
|
||||||
print "Problem operatora - brak możliwości sprawdzenia..."
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:readatcmd
|
|
||||||
let i=20
|
|
||||||
send $c
|
|
||||||
:loop
|
|
||||||
get 1 "^m" $s
|
|
||||||
let l=len($r)
|
|
||||||
if len($s) < l goto loop1
|
|
||||||
if $mid($s,1,l) <> $r goto loop1
|
|
||||||
|
|
||||||
let $j="x"
|
|
||||||
if $mid($s,9,1) <> "," goto del2
|
|
||||||
let $j=$mid($s,8,1)
|
|
||||||
goto del3
|
|
||||||
:del2
|
|
||||||
if $mid($s,10,1) <> "," goto del3
|
|
||||||
let $j=$mid($s,8,2)
|
|
||||||
|
|
||||||
:del3
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
if $j = "x" goto del4
|
|
||||||
send "AT+CMGD="
|
|
||||||
send $j
|
|
||||||
send "^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
:del4
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:loop1
|
|
||||||
if len($s) < 2 goto loop2
|
|
||||||
if $mid($s,1,2) = "ER" return
|
|
||||||
:loop2
|
|
||||||
if i = 0 return
|
|
||||||
let i=i-1
|
|
||||||
sleep 0.5
|
|
||||||
goto loop
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT+CNMI=0,1,0,0,0^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "AT+CMGF=1^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "AT+CMGL=\"ALL\"^m"
|
|
||||||
waitfor 10 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"AA982C3602\",15^m"
|
|
||||||
waitfor 5 "+CUSD:"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
let $c="AT+CMGL=\"REC UNREAD\"^m"
|
|
||||||
let $r="+CMGL"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+CMGL=\"REC UNREAD\"^m"
|
|
||||||
let $r="+CMGL"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
:error
|
|
||||||
print "Problem operatora - brak możliwości sprawdzenia..."
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:readatcmd
|
|
||||||
let i=20
|
|
||||||
send $c
|
|
||||||
:loop
|
|
||||||
get 1 "^m" $s
|
|
||||||
let l=len($r)
|
|
||||||
if len($s) < l goto loop1
|
|
||||||
if $mid($s,1,l) <> $r goto loop1
|
|
||||||
|
|
||||||
let $j="x"
|
|
||||||
if $mid($s,9,1) <> "," goto del2
|
|
||||||
let $j=$mid($s,8,1)
|
|
||||||
goto del3
|
|
||||||
:del2
|
|
||||||
if $mid($s,10,1) <> "," goto del3
|
|
||||||
let $j=$mid($s,8,2)
|
|
||||||
|
|
||||||
:del3
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
if $j = "x" goto del4
|
|
||||||
send "AT+CMGD="
|
|
||||||
send $j
|
|
||||||
send "^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
:del4
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:loop1
|
|
||||||
if len($s) < 2 goto loop2
|
|
||||||
if $mid($s,1,2) = "ER" return
|
|
||||||
:loop2
|
|
||||||
if i = 0 return
|
|
||||||
let i=i-1
|
|
||||||
sleep 0.5
|
|
||||||
goto loop
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "at+cmgf=0^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "at+cscs=\"IRA\"^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"AA182CA682C546\",15^m"
|
|
||||||
waitfor 5 "+CUSD:"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:error
|
|
||||||
print ""
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
. /usr/share/3ginfo/scripts/functions.sh
|
|
||||||
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/ofnk.gcom | cut -f2 -d\")
|
|
||||||
if [ ! -z "$O" ]; then
|
|
||||||
pdu2txt "$O"
|
|
||||||
else
|
|
||||||
echo "Problem operatora - brak możliwości sprawdzenia"
|
|
||||||
fi
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"*101*01#\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:noresponse
|
|
||||||
print ""
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/ofnk2.gcom | cut -f2 -d\")
|
|
||||||
if [ ! -z "$O" ]; then
|
|
||||||
A=$(echo $O | awk '{for(i=1;;i=i+4)if(substr($1,i,4)!=""){printf "%c",(index("0123456789ABCDEF",substr($1,i+2,1))-1)*16+(index("0123456789ABCDEF",substr($1,i+3,1))-1)}else exit;}')
|
|
||||||
echo $A | sed -e 's/1 Opis.*9 Powrot.*0 Wyjscie//g'
|
|
||||||
else
|
|
||||||
echo "Problem operatora - brak możliwości sprawdzenia"
|
|
||||||
fi
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"*111#\",15^m"
|
|
||||||
waitfor 10 "0 Wyjscie"
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"1\",15^m"
|
|
||||||
waitfor 10 "0 Wyjscie"
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
let c=20
|
|
||||||
send "AT+CUSD=1,\"3\",15^m"
|
|
||||||
:loop
|
|
||||||
get 1 "^m" $s
|
|
||||||
if c=0 goto exit
|
|
||||||
if len($s) < 6 goto toshort
|
|
||||||
if $mid($s,1,5) = "+CUSD" goto ok
|
|
||||||
:toshort
|
|
||||||
let c=c-1
|
|
||||||
sleep 1
|
|
||||||
goto loop
|
|
||||||
:ok
|
|
||||||
let $s=$right($s,len($s)-10)
|
|
||||||
print $s,"\"\n"
|
|
||||||
|
|
||||||
:exit
|
|
||||||
send "AT+CUSD=1,\"0\",15^m"
|
|
||||||
waitfor 10 "Dziekujemy"
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:noresponse
|
|
||||||
print "Problem operatora - brak możliwości sprawdzenia..."
|
|
||||||
exit 0
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"*111#\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"1\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"3\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"0\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:noresponse
|
|
||||||
print ""
|
|
||||||
exit 0
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/play_fresh2.gcom | cut -f2 -d\")
|
|
||||||
if [ ! -z "$O" ]; then
|
|
||||||
A=$(echo $O | awk '{for(i=1;;i=i+4)if(substr($1,i,4)!=""){printf "%c",(index("0123456789ABCDEF",substr($1,i+2,1))-1)*16+(index("0123456789ABCDEF",substr($1,i+3,1))-1)}else exit;}')
|
|
||||||
echo $A | sed -e 's/1 Opis.*9 Powrot.*0 Wyjscie//g'
|
|
||||||
else
|
|
||||||
echo "Problem operatora - brak możliwości sprawdzenia"
|
|
||||||
fi
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"AA582C3602\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"31\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"33\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"30\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:noresponse
|
|
||||||
print ""
|
|
||||||
exit 0
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
. /usr/share/3ginfo/scripts/functions.sh
|
|
||||||
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/play_fresh_pdu.gcom | cut -f2 -d\")
|
|
||||||
if [ ! -z "$O" ]; then
|
|
||||||
pdu2txt "$O" | tr '\n' ' ' | sed -e 's/1 Opis.*9 Powrot.*0 Wyjscie//g'
|
|
||||||
else
|
|
||||||
echo "Problem operatora - brak możliwości sprawdzenia"
|
|
||||||
fi
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"AA182C3602\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"30\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:noresponse
|
|
||||||
print ""
|
|
||||||
exit 0
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
. /usr/share/3ginfo/scripts/functions.sh
|
|
||||||
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/tmobile.gcom | cut -f2 -d\")
|
|
||||||
if [ ! -z "$O" ]; then
|
|
||||||
pdu2txt "$O" | tr '\n' ' ' | sed -e 's/1 Opis 9 Powrot 0 Wyjscie//g'
|
|
||||||
else
|
|
||||||
echo "Problem operatora - brak możliwości sprawdzenia"
|
|
||||||
fi
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"*108#\",15^m"
|
|
||||||
waitfor 10 "+CUSD: "
|
|
||||||
if % = -1 goto noresponse
|
|
||||||
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:noresponse
|
|
||||||
print ""
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "at+cmgf=0^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "at+cscs=\"IRA\"^m"
|
|
||||||
waitfor 5 "OK"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
send "AT+CUSD=1,\"AA180C3702\",15^m"
|
|
||||||
waitfor 5 "+CUSD:"
|
|
||||||
if % = -1 goto error
|
|
||||||
|
|
||||||
get 1 "^m" $s
|
|
||||||
print $s
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:error
|
|
||||||
print ""
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
. /usr/share/3ginfo/scripts/functions.sh
|
|
||||||
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/virginmobile_pdu.gcom | cut -f2 -d\")
|
|
||||||
if [ ! -z "$O" ]; then
|
|
||||||
pdu2txt "$O"
|
|
||||||
else
|
|
||||||
echo "Problem operatora - brak możliwości sprawdzenia"
|
|
||||||
fi
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
<html>
|
|
||||||
<style type="text/css">
|
|
||||||
body {font-family: Verdana, Arial, Helvetica, sans-serif;}
|
|
||||||
.c {margin:auto;text-align:center;clear:both;}
|
|
||||||
.l {width:49%;clear:both;float:left;text-align:right;}
|
|
||||||
.r {width:49%;float:right;text-align:left;}
|
|
||||||
</style>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Siła sygnału</title>
|
|
||||||
<script language="javascript" type="text/javascript">
|
|
||||||
<!--
|
|
||||||
var secs=0;
|
|
||||||
var delay = 1000;
|
|
||||||
|
|
||||||
startTimer();
|
|
||||||
function startTimer()
|
|
||||||
{
|
|
||||||
if (secs==0)
|
|
||||||
{
|
|
||||||
secs=3;
|
|
||||||
refreshData();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self.status = secs;
|
|
||||||
secs = secs - 1;
|
|
||||||
}
|
|
||||||
self.setTimeout("startTimer()", delay);
|
|
||||||
}
|
|
||||||
function refreshData()
|
|
||||||
{
|
|
||||||
var req;
|
|
||||||
|
|
||||||
try {req = new XMLHttpRequest();} catch (e) {
|
|
||||||
try {req = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {
|
|
||||||
try {req = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {
|
|
||||||
alert("Coś stara ta przelądarka...");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
req.open("GET", "/cgi-bin/signal.sh");
|
|
||||||
|
|
||||||
req.onreadystatechange = function() {
|
|
||||||
|
|
||||||
if (req.readyState == 4) {
|
|
||||||
var line=req.responseText;
|
|
||||||
var arr=(line.split(/,/));
|
|
||||||
if(arr.length>3)
|
|
||||||
{
|
|
||||||
var p = (arr[2]*100/31).toFixed();
|
|
||||||
document.getElementById('csq').innerHTML=p+'%';
|
|
||||||
document.getElementById('precent').style.width=p+"%";
|
|
||||||
var color = "red";
|
|
||||||
if (p > 29) {color="orange"; }
|
|
||||||
if (p > 45) {color="yellow"; }
|
|
||||||
if (p > 61) {color="green"; }
|
|
||||||
document.getElementById('precent').style.backgroundColor=color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
req.send(null);
|
|
||||||
}
|
|
||||||
//-->
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<table style='width:100%;height:100%;'>
|
|
||||||
<tr><td colspan=3 style='height:100px;'> </td></tr>
|
|
||||||
<tr>
|
|
||||||
<td> </td>
|
|
||||||
<td style='width:600px; height:200px;'>
|
|
||||||
<span class="l">Siła sygnału:</span><span id="csq" class="r"></span>
|
|
||||||
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
|
|
||||||
<div id="precent" style="float:left; background-color:black; border-right:1px solid #000000; height:100%; width:0%"> </div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
<tr><td colspan=3> </td></tr>
|
|
||||||
</table>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
<span class="l" style="display:{STATUS_SHOW}">Status:</span><span class="r" style="display:{STATUS_SHOW}">{STATUS}</span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Connection time:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{CONN_TIME}</small></span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Received:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{RX}</small></span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Transmitted:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{TX}</small></span>
|
|
||||||
<span class="l">Operator:</span><span class="r">{COPS}</span>
|
|
||||||
<span class="l">Operating mode:</span><span class="r">{MODE}</span>
|
|
||||||
<span class="l">Signal strength:</span><span class="r"><strong>{CSQ_PER}%</strong></span>
|
|
||||||
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
|
|
||||||
<div style="float:left; background-color:{CSQ_COL}; border-right:1px solid #000000; height:100%; width:{CSQ_PER}%"> </div>
|
|
||||||
</div>
|
|
||||||
<div class="c" style="display:{SMS_SHOW};"><input type="button" class="button" value="SMS" onClick="window.location.href='cgi-bin/sms.sh'"></div>
|
|
||||||
<div class="c" style="display:{USSD_SHOW};"><input type="button" class="button" value="USSD" onClick="window.location.href='cgi-bin/ussd.sh'"></div>
|
|
||||||
<div class="c" style="display:{LIMIT_SHOW};"><input type="button" class="button" value="Pozostały limit" onClick="return trzyginfo('cgi-bin/limit.sh',0);"></div>
|
|
||||||
<div class="c"><input type="button" class="button" value="Refresh" onClick="return trzyginfo('cgi-bin/3ginfo.sh',0);"></div>
|
|
||||||
<div class="c" style="display:{STATUS_SHOW_BUTTON}"><input type="button" class="button" value="{STATUS_TRE}" onClick="trzyginfo('cgi-bin/onoff.sh',1);"></div>
|
|
||||||
<br />
|
|
||||||
<a href="#" id='details_on' onclick="detailson();" style="float:left;display:inline;"><small>Show details</small></a>
|
|
||||||
<a href="#" id='details_off' onclick="detailsoff();" style="float:left;display:none;"><small>Hide details</small></a>
|
|
||||||
<br />
|
|
||||||
<div id='details' style="display:none;">
|
|
||||||
<span class="l">CSQ:</span><span class="r">{CSQ}</span>
|
|
||||||
<span class="l">RSSI:</span><span class="r">{CSQ_RSSI} dBm</span>
|
|
||||||
<span class="l" style="display:{QOS_SHOW}">UMTS QoS Profile:</span><span class="r" style="display:{QOS_SHOW}">{DOWN} kbps DOWN | {UP} kbps UP</span>
|
|
||||||
<span class="l">MCC MNC:</span><span class="r">{COPS_MCC} {COPS_MNC}</span>
|
|
||||||
<span class="l">LAC:</span><span class="r">{LAC} ({LAC_NUM})</span>
|
|
||||||
<span class="l">CID:</span><span class="r">{CID} ({CID_NUM})</span>
|
|
||||||
<span class="l">TAC:</span><span class="r">{TAC} ({TAC_NUM})</span>
|
|
||||||
<span class="l">RSCP:</span><span class="r">{RSCP} dBm</span>
|
|
||||||
<span class="l">Ec/IO:</span><span class="r">{ECIO} dB</span>
|
|
||||||
<span class="l">RSRP:</span><span class="r">{RSRP} dBm</span>
|
|
||||||
<span class="l">SINR:</span><span class="r">{SINR} dB</span>
|
|
||||||
<span class="l">RSRQ:</span><span class="r">{RSRQ} dB</span>
|
|
||||||
<span class="l"> </span><small><span class="r">{BTSINFO}</small>
|
|
||||||
<span class="l">Device:</span><span class="r">{DEVICE}</span>
|
|
||||||
</div>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
<span class="l" style="display:{STATUS_SHOW}">Staatus:</span><span class="r" style="display:{STATUS_SHOW}">{STATUS}</span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Ühendusaeg:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{CONN_TIME}</small></span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Vastvõetud:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{RX}</small></span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Saadetud:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{TX}</small></span>
|
|
||||||
<span class="l">Operaator:</span><span class="r">{COPS}</span>
|
|
||||||
<span class="l">Töörežiim:</span><span class="r">{MODE}</span>
|
|
||||||
<span class="l">Signaali tugevus:</span><span class="r"><strong>{CSQ_PER}%</strong></span>
|
|
||||||
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
|
|
||||||
<div style="float:left; background-color:{CSQ_COL}; border-right:1px solid #000000; height:100%; width:{CSQ_PER}%"> </div>
|
|
||||||
</div>
|
|
||||||
<div class="c" style="display:{SMS_SHOW};"><input type="button" class="button" value="SMS" onClick="window.location.href='cgi-bin/sms.sh'"></div>
|
|
||||||
<div class="c" style="display:{USSD_SHOW};"><input type="button" class="button" value="USSD" onClick="window.location.href='cgi-bin/ussd.sh'"></div>
|
|
||||||
<div class="c" style="display:{LIMIT_SHOW};"><input type="button" class="button" value="Pozostały limit" onClick="return trzyginfo('cgi-bin/limit.sh',0);"></div>
|
|
||||||
<div class="c"><input type="button" class="button" value="Uuenda" onClick="return trzyginfo('cgi-bin/3ginfo.sh',0);"></div>
|
|
||||||
<div class="c" style="display:{STATUS_SHOW_BUTTON}"><input type="button" class="button" value="{STATUS_TRE}" onClick="trzyginfo('cgi-bin/onoff.sh',1);"></div>
|
|
||||||
<br />
|
|
||||||
<a href="#" id='details_on' onclick="detailson();" style="float:left;display:inline;"><small>Näita detaile</small></a>
|
|
||||||
<a href="#" id='details_off' onclick="detailsoff();" style="float:left;display:none;"><small>Peida detailid</small></a>
|
|
||||||
<br />
|
|
||||||
<div id='details' style="display:none;">
|
|
||||||
<span class="l">CSQ:</span><span class="r">{CSQ}</span>
|
|
||||||
<span class="l">RSSI:</span><span class="r">{CSQ_RSSI} dBm</span>
|
|
||||||
<span class="l" style="display:{QOS_SHOW}">UMTS QoS Profile:</span><span class="r" style="display:{QOS_SHOW}">{DOWN} kbps DOWN | {UP} kbps UP</span>
|
|
||||||
<span class="l">MCC MNC:</span><span class="r">{COPS_MCC} {COPS_MNC}</span>
|
|
||||||
<span class="l">LAC:</span><span class="r">{LAC} ({LAC_NUM})</span>
|
|
||||||
<span class="l">CID:</span><span class="r">{CID} ({CID_NUM})</span>
|
|
||||||
<span class="l">TAC:</span><span class="r">{TAC} ({TAC_NUM})</span>
|
|
||||||
<span class="l">RSCP:</span><span class="r">{RSCP} dBm</span>
|
|
||||||
<span class="l">Ec/IO:</span><span class="r">{ECIO} dB</span>
|
|
||||||
<span class="l">RSRP:</span><span class="r">{RSRP} dBm</span>
|
|
||||||
<span class="l">SINR:</span><span class="r">{SINR} dB</span>
|
|
||||||
<span class="l">RSRQ:</span><span class="r">{RSRQ} dB</span>
|
|
||||||
<span class="l"> </span><small><span class="r">{BTSINFO}</small>
|
|
||||||
<span class="l">Seade:</span><span class="r">{DEVICE}</span>
|
|
||||||
</div>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
<span class="l" style="display:{STATUS_SHOW}">Stato:</span><span class="r" style="display:{STATUS_SHOW}">{STATUS}</span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Tempo di connessione:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{CONN_TIME}</small></span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Ricevuti:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{RX}</small></span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Trasmessi:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{TX}</small></span>
|
|
||||||
<span class="l">Operatore:</span><span class="r">{COPS}</span>
|
|
||||||
<span class="l">Tipo di connessione:</span><span class="r">{MODE}</span>
|
|
||||||
<span class="l">Forza segnale:</span><span class="r"><strong>{CSQ_PER}%</strong></span>
|
|
||||||
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
|
|
||||||
<div style="float:left; background-color:{CSQ_COL}; border-right:1px solid #000000; height:100%; width:{CSQ_PER}%"> </div>
|
|
||||||
</div>
|
|
||||||
<div class="c" style="display:{SMS_SHOW};"><input type="button" class="button" value="SMS" onClick="window.location.href='cgi-bin/sms.sh'"></div>
|
|
||||||
<div class="c" style="display:{USSD_SHOW};"><input type="button" class="button" value="USSD" onClick="window.location.href='cgi-bin/ussd.sh'"></div>
|
|
||||||
<div class="c" style="display:{LIMIT_SHOW};"><input type="button" class="button" value="Limite" onClick="return trzyginfo('cgi-bin/limit.sh',0);"></div>
|
|
||||||
<div class="c"><input type="button" class="button" value="Aggiorna" onClick="return trzyginfo('cgi-bin/3ginfo.sh',0);"></div>
|
|
||||||
<div class="c" style="display:{STATUS_SHOW_BUTTON}"><input type="button" class="button" value="{STATUS_TRE}" onClick="trzyginfo('cgi-bin/onoff.sh',1);"></div>
|
|
||||||
<br />
|
|
||||||
<a href="#" id='details_on' onclick="detailson();" style="float:left;display:inline;"><small>Mostra dettagli</small></a>
|
|
||||||
<a href="#" id='details_off' onclick="detailsoff();" style="float:left;display:none;"><small>Nascondi dettagli</small></a>
|
|
||||||
<br />
|
|
||||||
<div id='details' style="display:none;">
|
|
||||||
<span class="l">CSQ:</span><span class="r">{CSQ}</span>
|
|
||||||
<span class="l">RSSI:</span><span class="r">{CSQ_RSSI} dBm</span>
|
|
||||||
<span class="l" style="display:{QOS_SHOW}">Profilo UMTS QoS:</span><span class="r" style="display:{QOS_SHOW}">{DOWN} kbps DOWN | {UP} kbps UP</span>
|
|
||||||
<span class="l">MCC MNC:</span><span class="r">{COPS_MCC} {COPS_MNC}</span>
|
|
||||||
<span class="l">LAC:</span><span class="r">{LAC} ({LAC_NUM})</span>
|
|
||||||
<span class="l">CID:</span><span class="r">{CID} ({CID_NUM})</span>
|
|
||||||
<span class="l">TAC:</span><span class="r">{TAC} ({TAC_NUM})</span>
|
|
||||||
<span class="l">RSCP:</span><span class="r">{RSCP} dBm</span>
|
|
||||||
<span class="l">Ec/IO:</span><span class="r">{ECIO} dB</span>
|
|
||||||
<span class="l">RSRP:</span><span class="r">{RSRP} dBm</span>
|
|
||||||
<span class="l">SINR:</span><span class="r">{SINR} dB</span>
|
|
||||||
<span class="l">RSRQ:</span><span class="r">{RSRQ} dB</span>
|
|
||||||
<span class="l"> </span><small><span class="r">{BTSINFO}</small>
|
|
||||||
<span class="l">Dispositivo:</span><span class="r">{DEVICE}</span>
|
|
||||||
</div>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
<span class="l" style="display:{STATUS_SHOW}">Status:</span><span class="r" style="display:{STATUS_SHOW}">{STATUS}</span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Czas połączenia:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{CONN_TIME}</small></span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Pobrano:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{RX}</small></span>
|
|
||||||
<span class="l" style="display:{STATUS_SHOW}"><small>Wysłano:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{TX}</small></span>
|
|
||||||
<span class="l">Operator:</span><span class="r">{COPS}</span>
|
|
||||||
<span class="l">Tryb pracy:</span><span class="r">{MODE}</span>
|
|
||||||
<span class="l">Siła sygnału:</span><span class="r"><strong>{CSQ_PER}%</strong></span>
|
|
||||||
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
|
|
||||||
<div style="float:left; background-color:{CSQ_COL}; border-right:1px solid #000000; height:100%; width:{CSQ_PER}%"> </div>
|
|
||||||
</div>
|
|
||||||
<div class="c" style="display:{SMS_SHOW};"><input type="button" class="button" value="SMS" onClick="window.location.href='cgi-bin/sms.sh'"></div>
|
|
||||||
<div class="c" style="display:{USSD_SHOW};"><input type="button" class="button" value="USSD" onClick="window.location.href='cgi-bin/ussd.sh'"></div>
|
|
||||||
<div class="c" style="display:{LIMIT_SHOW};"><input type="button" class="button" value="Pozostały limit" onClick="return trzyginfo('cgi-bin/limit.sh',0);"></div>
|
|
||||||
<div class="c"><input type="button" class="button" value="Odśwież" onClick="return trzyginfo('cgi-bin/3ginfo.sh',0);"></div>
|
|
||||||
<div class="c" style="display:{STATUS_SHOW_BUTTON}"><input type="button" class="button" value="{STATUS_TRE}" onClick="trzyginfo('cgi-bin/onoff.sh',1);"></div>
|
|
||||||
<br />
|
|
||||||
<a href="#" id='details_on' onclick="detailson();" style="float:left;display:inline;"><small>Pokaż informacje dodatkowe</small></a>
|
|
||||||
<a href="#" id='details_off' onclick="detailsoff();" style="float:left;display:none;"><small>Ukryj informacje dodatkowe</small></a>
|
|
||||||
<br />
|
|
||||||
<div id='details' style="display:none;">
|
|
||||||
<span class="l">CSQ:</span><span class="r">{CSQ}</span>
|
|
||||||
<span class="l">RSSI:</span><span class="r">{CSQ_RSSI} dBm</span>
|
|
||||||
<span class="l" style="display:{QOS_SHOW}">Profil UMTS QoS:</span><span class="r" style="display:{QOS_SHOW}">{DOWN} kbps DOWN | {UP} kbps UP</span>
|
|
||||||
<span class="l">MCC MNC:</span><span class="r">{COPS_MCC} {COPS_MNC}</span>
|
|
||||||
<span class="l">LAC:</span><span class="r">{LAC} ({LAC_NUM})</span>
|
|
||||||
<span class="l">CID:</span><span class="r">{CID} ({CID_NUM})</span>
|
|
||||||
<span class="l">TAC:</span><span class="r">{TAC} ({TAC_NUM})</span>
|
|
||||||
<span class="l">RSCP:</span><span class="r">{RSCP} dBm</span>
|
|
||||||
<span class="l">Ec/IO:</span><span class="r">{ECIO} dB</span>
|
|
||||||
<span class="l">RSRP:</span><span class="r">{RSRP} dBm</span>
|
|
||||||
<span class="l">SINR:</span><span class="r">{SINR} dB</span>
|
|
||||||
<span class="l">RSRQ:</span><span class="r">{RSRQ} dB</span>
|
|
||||||
<span class="l"> </span><small><span class="r">{BTSINFO}</small>
|
|
||||||
<span class="l">Urządzenie:</span><span class="r">{DEVICE}</span>
|
|
||||||
</div>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
E404:/index.html
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
|
||||||
|
|
||||||
#
|
|
||||||
# (c) 2010-2024 Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
#
|
|
||||||
|
|
||||||
START=99
|
|
||||||
|
|
||||||
start() {
|
|
||||||
PORT=$(uci -q get 3ginfo.@3ginfo[0].http_port)
|
|
||||||
[ -z "$PORT" ] && PORT=81
|
|
||||||
uhttpd -E /index.html -x /cgi-bin -h /usr/share/3ginfo/html -p 0.0.0.0:$PORT -i .sh=/bin/sh > /dev/null 2>&1
|
|
||||||
}
|
|
||||||
@@ -1,192 +0,0 @@
|
|||||||
label {
|
|
||||||
font-weight: 400;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal {
|
|
||||||
display: none;
|
|
||||||
position: fixed;
|
|
||||||
z-index: 1;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
overflow: auto;
|
|
||||||
background-color: rgb(0,0,0);
|
|
||||||
background-color: rgba(0,0,0,0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-content {
|
|
||||||
background-color: #fefefe;
|
|
||||||
margin: 15% auto;
|
|
||||||
padding: 20px;
|
|
||||||
border: 1px solid #888;
|
|
||||||
width: 80%;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.section {
|
|
||||||
border-bottom: 1px dashed #8c8b8b;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#container {
|
|
||||||
transition: margin-left .5s;
|
|
||||||
padding: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.click,
|
|
||||||
.click:hover,
|
|
||||||
.click:visited,
|
|
||||||
.click:link {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #31708f;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.margintop {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.margintop {
|
|
||||||
margin-top: -90px;
|
|
||||||
}
|
|
||||||
.center-xd {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.sizing-box {
|
|
||||||
height: 110px;
|
|
||||||
width: 150px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.signal-bars {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.signal-bars .bar {
|
|
||||||
width: 14%;
|
|
||||||
margin-left: 1%;
|
|
||||||
min-height: 20%;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
.signal-bars .bar.first-bar { height: 20%; }
|
|
||||||
.signal-bars .bar.second-bar { height: 40%; }
|
|
||||||
.signal-bars .bar.third-bar { height: 60%; }
|
|
||||||
.signal-bars .bar.fourth-bar { height: 80%; }
|
|
||||||
.signal-bars .bar.fifth-bar { height: 99%; }
|
|
||||||
|
|
||||||
.lzero .bar {
|
|
||||||
background-color: #fafafa;
|
|
||||||
border: thin solid #ccc;
|
|
||||||
}
|
|
||||||
.lone .bar {
|
|
||||||
background-color: #ff0000;
|
|
||||||
border: thin solid #800000;
|
|
||||||
}
|
|
||||||
.ltwo .bar {
|
|
||||||
background-color: #ff6a00;
|
|
||||||
border: thin solid #803500;
|
|
||||||
}
|
|
||||||
.lthree .bar {
|
|
||||||
background-color: #ffd800;
|
|
||||||
border: thin solid #806a00;
|
|
||||||
}
|
|
||||||
.lfour .bar {
|
|
||||||
background-color: #b6ff00;
|
|
||||||
border: thin solid #558000;
|
|
||||||
}
|
|
||||||
.lfive .bar {
|
|
||||||
background-color: #4cff00;
|
|
||||||
border: thin solid #2a8000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.four-bars .bar.fifth-bar,
|
|
||||||
.three-bars .bar.fifth-bar,
|
|
||||||
.three-bars .bar.fourth-bar,
|
|
||||||
.one-bar .bar:not(.first-bar),
|
|
||||||
.two-bars .bar:not(.first-bar):not(.second-bar) {
|
|
||||||
background-color: #fafafa;
|
|
||||||
border: thin solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.oneline {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 527px) {
|
|
||||||
.hidden-vxs {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 578px) and (max-width: 821px) {
|
|
||||||
.modalmargintop {
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.error {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.col-xs-12-text-left {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab {
|
|
||||||
overflow: hidden;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
background-color: #f1f1f1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab button {
|
|
||||||
background-color: inherit;
|
|
||||||
float: left;
|
|
||||||
border: none;
|
|
||||||
outline: none;
|
|
||||||
cursor: pointer;
|
|
||||||
padding: 14px 16px;
|
|
||||||
transition: 0.3s;
|
|
||||||
font-size: 17px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab button:hover {
|
|
||||||
background-color: #ddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab button.active {
|
|
||||||
background-color: #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tabcontent {
|
|
||||||
display: none;
|
|
||||||
padding: 6px 12px;
|
|
||||||
b1order: 1px solid #ccc;
|
|
||||||
b1order-top: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-height {
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.flex-center {
|
|
||||||
align-items: center;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.position-ref {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.flex-content {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
@@ -1,803 +0,0 @@
|
|||||||
function readdata(source, callback) {
|
|
||||||
var xmlhttp;
|
|
||||||
try {xmlhttp = new XMLHttpRequest();} catch (e) {
|
|
||||||
try {xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {
|
|
||||||
try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {
|
|
||||||
alert("Old browser?");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xmlhttp.open("GET", "/cgi-bin/" + source);
|
|
||||||
xmlhttp.onreadystatechange = function() {
|
|
||||||
if (xmlhttp.readyState == 4) {
|
|
||||||
if(xmlhttp.status == 200) {
|
|
||||||
callback(JSON.parse(xmlhttp.responseText));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xmlhttp.send(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
function translate() {
|
|
||||||
var lang = navigator.languages ? navigator.languages[0] : navigator.language;
|
|
||||||
this._lang = lang.substr(0, 2);
|
|
||||||
// this._lang = 'en';
|
|
||||||
|
|
||||||
fetch(`/i18n/${this._lang}.json`)
|
|
||||||
.then((response) => {
|
|
||||||
if (response.ok) {
|
|
||||||
return response.json();
|
|
||||||
}
|
|
||||||
throw new Error('Something went wrong');
|
|
||||||
})
|
|
||||||
.then((translation) => {
|
|
||||||
this._translation = translation;
|
|
||||||
this._elements = document.querySelectorAll("[data-i18n]");
|
|
||||||
this._elements.forEach((element) => {
|
|
||||||
var keys = element.dataset.i18n.split(".");
|
|
||||||
var text = keys.reduce((obj, i) => obj[i], translation);
|
|
||||||
if (text) {
|
|
||||||
element.innerHTML = text;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.log(`Could not load ${this._lang}, en will be used`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function _t(text, defaulttext) {
|
|
||||||
if (this._translation) {
|
|
||||||
var key = text.replaceAll(' ', '').toLowerCase();
|
|
||||||
if (key in this._translation) {
|
|
||||||
return this._translation[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return defaulttext ? defaulttext : text;
|
|
||||||
}
|
|
||||||
|
|
||||||
function info_onload() {
|
|
||||||
translate();
|
|
||||||
showmodeminfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatDateTime(s) {
|
|
||||||
if (s.length == 14) {
|
|
||||||
return s.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3 $4:$5:$6");
|
|
||||||
} else if (s.length == 12) {
|
|
||||||
return s.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3 $4:$5");
|
|
||||||
} else if (s.length == 8) {
|
|
||||||
return s.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3");
|
|
||||||
} else if (s.length == 6) {
|
|
||||||
return s.replace(/(\d{4})(\d{2})/, "$1-$2");
|
|
||||||
}
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
function lz(n) {
|
|
||||||
return (n < 10 ? '0' : '' ) + n;
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatDateTimeForUptime(uptime) {
|
|
||||||
var d = new Date(new Date().getTime() - uptime * 1000);
|
|
||||||
return '' +
|
|
||||||
d.getFullYear() + '-' +
|
|
||||||
lz(d.getMonth() + 1) + '-' +
|
|
||||||
lz(d.getDate()) + ' ' +
|
|
||||||
lz(d.getHours()) + ':' +
|
|
||||||
lz(d.getMinutes()) + ':' +
|
|
||||||
lz(d.getSeconds());
|
|
||||||
}
|
|
||||||
|
|
||||||
function createRowForModal(key, value) {
|
|
||||||
return '<div class="row"><div class="col-xs-5 col-sm-6 text-right">' + key + '</div><div class="col-xs-7 col-sm-6 text-left"><p>' + value + '</p></div></div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
function createRow9ColForModal(arr) {
|
|
||||||
return '<div class="row">' +
|
|
||||||
'<div class="col-xs-1 text-right"><p>' + arr[0] + '</p></div>' +
|
|
||||||
'<div class="col-xs-3 text-left"><p>' + arr[1] + '</p></div>' +
|
|
||||||
'<div class="col-xs-2 text-left"><p>' + arr[2] + '</p></div>' +
|
|
||||||
'<div class="col-xs-1 text-left"><p>' + arr[3] + '</p></div>' +
|
|
||||||
'<div class="col-xs-1 text-left"><p>' + arr[4] + '</p></div>' +
|
|
||||||
'<div class="col-xs-1 text-left"><p>' + arr[5] + '</p></div>' +
|
|
||||||
'<div class="col-xs-1 text-left"><p>' + arr[6] + '</p></div>' +
|
|
||||||
'<div class="col-xs-1 text-left"><p>' + arr[7] + '</p></div>' +
|
|
||||||
'<div class="col-xs-1 text-left"><p>' + arr[8] + '</p></div>' +
|
|
||||||
'</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
var modal;
|
|
||||||
|
|
||||||
function setValue(element, value) {
|
|
||||||
var e = document.getElementById(element);
|
|
||||||
if (e.tagName == "SELECT") {
|
|
||||||
for (var i = 0; i < e.options.length; i++) {
|
|
||||||
if (e.options[i].value == value) {
|
|
||||||
e.selectedIndex = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (e.tagName == "P") {
|
|
||||||
e.innerHTML = value;
|
|
||||||
} else if (e.tagName == "H3") {
|
|
||||||
e.innerHTML = value;
|
|
||||||
} else if (e.tagName == "SPAN") {
|
|
||||||
e.innerHTML = value;
|
|
||||||
} else if (e.tagName == "DIV") {
|
|
||||||
e.innerHTML = value;
|
|
||||||
} else if (e.type === 'checkbox') {
|
|
||||||
e.checked = value;
|
|
||||||
} else if (e.type === 'radio') {
|
|
||||||
e.checked = value;
|
|
||||||
} else {
|
|
||||||
e.value = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setDisplay(element, show) {
|
|
||||||
document.getElementById(element).style.display = (show ? 'block' : 'none');
|
|
||||||
}
|
|
||||||
|
|
||||||
function addClasses(element, classes) {
|
|
||||||
for (var i = 0; i < classes.length; i++) {
|
|
||||||
if (!element.className.match(new RegExp('(?:^|\\s)' + classes[i] + '(?!\\S)', 'g')))
|
|
||||||
element.className += " " + classes[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeClasses(element, classes) {
|
|
||||||
for (var i = 0; i < classes.length; i++) {
|
|
||||||
element.className = element.className.replace(new RegExp('(?:^|\\s)' + classes[i] + '(?!\\S)', 'g'), '');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function showMsg(msg, error) {
|
|
||||||
closeMsg();
|
|
||||||
|
|
||||||
if (!msg || 0 === msg.length) { msg = _t('Please wait') + '...'; }
|
|
||||||
var e = document.getElementById('msgtxt');
|
|
||||||
e.innerHTML = msg;
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
e.style.color = 'red';
|
|
||||||
addClasses(e, ['has-error']);
|
|
||||||
} else {
|
|
||||||
e.style.color = null;
|
|
||||||
removeClasses(e, ['has-error']);
|
|
||||||
}
|
|
||||||
|
|
||||||
modal = document.getElementById('div_msg');
|
|
||||||
modal.style.display = 'block';
|
|
||||||
|
|
||||||
window.onclick = function(event) {
|
|
||||||
if (event.target == modal) {
|
|
||||||
modal.style.display = 'none';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function closeMsg() {
|
|
||||||
if (modal) { modal.style.display = 'none'; }
|
|
||||||
}
|
|
||||||
|
|
||||||
function sortJSON(data, key, way) {
|
|
||||||
return data.sort(function(a, b) {
|
|
||||||
var x = a[key]; var y = b[key];
|
|
||||||
if (way === 'asc' ) { return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }
|
|
||||||
if (way === 'desc') { return ((x > y) ? -1 : ((x < y) ? 1 : 0)); }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatDuration(s, showsec) {
|
|
||||||
if (s === '-') {return '-';}
|
|
||||||
if (s === '') {return '-';}
|
|
||||||
var d = Math.floor(s/86400),
|
|
||||||
h = Math.floor(s/3600) % 24,
|
|
||||||
m = Math.floor(s/60)%60,
|
|
||||||
s = s % 60;
|
|
||||||
var time = d > 0 ? d + 'd ' : '';
|
|
||||||
if (time != '') {time += h + _t('h') + ' '} else {time = h > 0 ? h + _t('h') + ' ' : ''}
|
|
||||||
if (time != '') {time += m + 'm '} else {time = m > 0 ? m + 'm ' : ''}
|
|
||||||
if (showsec) {
|
|
||||||
time += s + 's';
|
|
||||||
} else {
|
|
||||||
if (time == '') { time += m + 'm'; }
|
|
||||||
}
|
|
||||||
return time;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
function modem(evt, modem) {
|
|
||||||
var i, tabcontent, tablinks;
|
|
||||||
tabcontent = document.getElementsByClassName("tabcontent");
|
|
||||||
for (i = 0; i < tabcontent.length; i++) {
|
|
||||||
tabcontent[i].style.display = "none";
|
|
||||||
}
|
|
||||||
tablinks = document.getElementsByClassName("tablinks");
|
|
||||||
for (i = 0; i < tablinks.length; i++) {
|
|
||||||
tablinks[i].className = tablinks[i].className.replace(" active", "");
|
|
||||||
}
|
|
||||||
document.getElementById(modem).style.display = "block";
|
|
||||||
evt.currentTarget.className += " active";
|
|
||||||
}
|
|
||||||
|
|
||||||
function showmodeminfo() {
|
|
||||||
readdata('infoproducts.sh', function(data1) {
|
|
||||||
var html = '';
|
|
||||||
if (data1.res.length > 1) {
|
|
||||||
var htmltab = '<div class="tab">';
|
|
||||||
(data1.res).forEach(function callback(value, idx) {
|
|
||||||
var id = (idx == 0 ? 'id="defaultOpen"' : '');
|
|
||||||
htmltab += '<button class="tablinks" onclick="modem(event, \'modem' + idx + '\')"' + id + '><span id="tabtitle' + idx + '"></span></button>';
|
|
||||||
html += ('<div id="modem' + idx + '" class="tabcontent">' + document.getElementById('div_template').innerHTML + '</div>').replaceAll('_idx', idx);
|
|
||||||
});
|
|
||||||
htmltab += '</div>';
|
|
||||||
setValue('div_modems', '');
|
|
||||||
document.getElementById('div_modems').insertAdjacentHTML('beforeend', htmltab + html);
|
|
||||||
|
|
||||||
document.getElementById("defaultOpen").click();
|
|
||||||
} else {
|
|
||||||
setValue('div_modems', '');
|
|
||||||
html += ('<div id="modem0">' + document.getElementById('div_template').innerHTML + '</div>').replaceAll('_idx', 0);
|
|
||||||
document.getElementById('div_modems').insertAdjacentHTML('beforeend', html);
|
|
||||||
}
|
|
||||||
|
|
||||||
(data1.res).forEach(function callback(data, idx) {
|
|
||||||
setValue('vendor' + idx, data.vendor == '' ? '-' : data.vendor);
|
|
||||||
setValue('product' + idx, data.product == '' ? '-' : data.product);
|
|
||||||
if (data1.res.length > 1) {
|
|
||||||
setValue('tabtitle' + idx, data.product == '' ? 'modem #' + (idx + 1) : data.product);
|
|
||||||
}
|
|
||||||
setValue('revision' + idx, data.revision == '' ? '-' : data.revision);
|
|
||||||
setValue('imei' + idx, data.imei == '' ? '-' : data.imei);
|
|
||||||
setValue('iccid' + idx, data.iccid == '' ? '-' : data.iccid);
|
|
||||||
setValue('imsi' + idx, data.imsi == '' ? '-' : data.imsi);
|
|
||||||
});
|
|
||||||
|
|
||||||
showmodemparams();
|
|
||||||
setInterval(showmodemparams, 10000);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var arrmodemaddon = [];
|
|
||||||
|
|
||||||
function showmodemparams() {
|
|
||||||
readdata('info.sh', function(data1) {
|
|
||||||
|
|
||||||
(data1.res).forEach(function callback(data2, idx) {
|
|
||||||
var data = data2[0];
|
|
||||||
setValue('rx' + idx, data.rx == '' ? '-' : data.rx);
|
|
||||||
setValue('tx' + idx, data.tx == '' ? '-' : data.tx);
|
|
||||||
setValue('uptime' + idx, formatDuration(data.conn_time_sec, false));
|
|
||||||
setValue('uptime_since' + idx, ' (' + _t('since') + ' ' + formatDateTimeForUptime(data.conn_time_sec) + ')');
|
|
||||||
|
|
||||||
var data = data2[1];
|
|
||||||
if (data.error)
|
|
||||||
return;
|
|
||||||
|
|
||||||
arrmodemaddon[idx] = [];
|
|
||||||
|
|
||||||
switch(data.registration) {
|
|
||||||
case "0":
|
|
||||||
setValue('registration' + idx, _t('registered0', 'Not registered'));
|
|
||||||
break;
|
|
||||||
case "1":
|
|
||||||
setValue('registration' + idx, _t('registered1', 'Registered, home network'));
|
|
||||||
break;
|
|
||||||
case "2":
|
|
||||||
setValue('registration' + idx, _t('registered2', 'Not registered, searching'));
|
|
||||||
break;
|
|
||||||
case "3":
|
|
||||||
setValue('registration' + idx, _t('registered3', 'Registration denied'));
|
|
||||||
break;
|
|
||||||
case "5":
|
|
||||||
setValue('registration' + idx, _t('registered5', 'Registered, roaming'));
|
|
||||||
break;
|
|
||||||
case "6":
|
|
||||||
setValue('registration' + idx, _t('registered6', 'Registered for SMS only, home network'));
|
|
||||||
break;
|
|
||||||
case "7":
|
|
||||||
setValue('registration' + idx, _t('registered7', 'Registered for SMS only, roaming'));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
setValue('registration' + idx, data.registration == '' ? '-' : data.registration);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.registration == '1' || data.registration == '5' || data.registration == '6' || data.registration == '7') {
|
|
||||||
setValue('signal' + idx, data.signal == '' ? '-' : data.signal + '%');
|
|
||||||
|
|
||||||
if (data.signal) {
|
|
||||||
var e = document.getElementById('signal_bars' + idx);
|
|
||||||
removeClasses(e, ['lzero', 'lone', 'ltwo', 'lthree', 'lfour', 'lfive', 'one-bar', 'two-bars', 'three-bars', 'four-bars', 'five-bars']);
|
|
||||||
if (data.signal >= 80) {
|
|
||||||
addClasses(e, ['lfive', 'five-bars']);
|
|
||||||
}
|
|
||||||
if (data.signal < 80 && data.signal >= 60) {
|
|
||||||
addClasses(e, ['lfour', 'four-bars']);
|
|
||||||
}
|
|
||||||
if (data.signal < 60 && data.signal >= 40) {
|
|
||||||
addClasses(e, ['lthree', 'three-bars']);
|
|
||||||
}
|
|
||||||
if (data.signal < 40 && data.signal >= 20) {
|
|
||||||
addClasses(e, ['ltwo', 'two-bars']);
|
|
||||||
}
|
|
||||||
if (data.signal < 20 && data.signal > 0) {
|
|
||||||
addClasses(e, ['lone', 'one-bar']);
|
|
||||||
}
|
|
||||||
if (data.signal == 0) {
|
|
||||||
addClasses(e, ['lzero', 'one-bar']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setValue('operator' + idx, data.operator_name == '' ? '-' : data.operator_name);
|
|
||||||
var mode = (data.mode == '' ? '-' : data.mode);
|
|
||||||
if (mode.toLowerCase().includes('lte') || mode.toLowerCase().includes('5g')) {
|
|
||||||
if (mode.toLowerCase().includes('lte')) {
|
|
||||||
mode = (data.mode).split(' ')[0];
|
|
||||||
}
|
|
||||||
if (mode.toLowerCase().includes('5g')) {
|
|
||||||
mode = (data.mode).split(' ')[0] + ' ' + (data.mode).split(' ')[1];
|
|
||||||
}
|
|
||||||
var count = ((data.mode).match(/\//g) || []).length;
|
|
||||||
if (count > 0) {
|
|
||||||
mode += ' (' + (count + 1) + 'CA)';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setValue('mode' + idx, mode);
|
|
||||||
|
|
||||||
arrmodemaddon[idx].push({'idx':1, 'key':'Mode', 'value':data.mode});
|
|
||||||
if (data.country) {
|
|
||||||
arrmodemaddon[idx].push({'idx':19, 'key':'Country', 'value':data.country});
|
|
||||||
}
|
|
||||||
if (data.operator_mcc && data.operator_mcc != '' && data.operator_mnc && data.operator_mnc != '') {
|
|
||||||
arrmodemaddon[idx].push({'idx':20, 'key':'MCC MNC', 'value':data.operator_mcc + ' ' + data.operator_mnc});
|
|
||||||
}
|
|
||||||
if (data.lac_dec && data.lac_dec > 0) {
|
|
||||||
arrmodemaddon[idx].push({'idx':22, 'key':'LAC', 'value':data.lac_dec + ' (' + data.lac_hex + ')'});
|
|
||||||
}
|
|
||||||
if (data.cid_dec && data.cid_dec > 0) {
|
|
||||||
arrmodemaddon[idx].push({'idx':21, 'key':'Cell ID', 'value':data.cid_dec + ' (' + data.cid_hex + ')'});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.cid_dec && data.cid_dec > 0 && data.operator_mcc == 260) {
|
|
||||||
switch (data.operator_mnc) {
|
|
||||||
case '01':
|
|
||||||
case '02':
|
|
||||||
case '03':
|
|
||||||
case '06':
|
|
||||||
document.getElementById('btsearch' + idx).setAttribute('href', 'https://btsearch.pl/stations?mnc=260' + data.operator_mnc + '&q=' + data.cid_dec);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
document.getElementById('btsearch' + idx).setAttribute('href', 'https://btsearch.pl/stations?q=' + data.cid_dec);
|
|
||||||
}
|
|
||||||
setDisplay('div_btsearch' + idx, true);
|
|
||||||
} else {
|
|
||||||
setDisplay('div_btsearch' + idx, false);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
setValue('signal' + idx, '-');
|
|
||||||
var e = document.getElementById('signal_bars' + idx);
|
|
||||||
removeClasses(e, ['lzero', 'lone', 'ltwo', 'lthree', 'lfour', 'lfive', 'one-bar', 'two-bars', 'three-bars', 'four-bars', 'five-bars']);
|
|
||||||
addClasses(e, ['lzero', 'one-bar']);
|
|
||||||
setValue('operator' + idx, '-');
|
|
||||||
setValue('mode' + idx, '-');
|
|
||||||
setDisplay('div_btsearch' + idx, false);
|
|
||||||
}
|
|
||||||
if (data.addon) {
|
|
||||||
arrmodemaddon[idx] = arrmodemaddon[idx].concat(data.addon);
|
|
||||||
}
|
|
||||||
setDisplay('div_addon' + idx, (arrmodemaddon[idx]).length > 0);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function paramdesc(param, value) {
|
|
||||||
var pvalue = parseInt(value.split(' ')[0]);
|
|
||||||
var description = '';
|
|
||||||
var color = '';
|
|
||||||
var title = '';
|
|
||||||
switch(param) {
|
|
||||||
case 'rssi':
|
|
||||||
if (pvalue > -65) { color = '#2bdf5a'; description += _t('excellent'); }
|
|
||||||
if (pvalue > -75 && pvalue <= -65 ) { color = '#efff12'; description += _t('good'); }
|
|
||||||
if (pvalue > -85 && pvalue <= -75 ) { color = '#f8c200'; description += _t('fair'); }
|
|
||||||
if (pvalue > -95 && pvalue <= -85 ) { color = '#fa0000'; description += _t('poor'); }
|
|
||||||
if (pvalue <= -95) { color = '#fa0000'; description += _t('very poor'); }
|
|
||||||
title += '> -65 dBm ' + _t('excellent') + '\n';
|
|
||||||
title += '> -75 dBm i <= -65 dBm ' + _t('good') + '\n';
|
|
||||||
title += '> -85 dBm i <= -75 dBm ' + _t('fair') + '\n';
|
|
||||||
title += '> -95 dBm i <= -85 dBm ' + _t('poor') + '\n';
|
|
||||||
title += '<= -95 dBm ' + _t('very poor');
|
|
||||||
break;
|
|
||||||
case 'rsrp':
|
|
||||||
if (pvalue >= -80) { color = '#2bdf5a'; description += _t('excellent'); }
|
|
||||||
if (pvalue >= -90 && pvalue < -80 ) { color = '#efff12'; description += _t('good'); }
|
|
||||||
if (pvalue >= -100 && pvalue < -90 ) { color = '#f8c200'; description += _t('fair'); }
|
|
||||||
if (pvalue < -100) { color = '#fa0000'; description += _t('poor'); }
|
|
||||||
title += '> -80 dBm ' + _t('excellent') + '\n';
|
|
||||||
title += '>= -90 dBm i < -80 dBm ' + _t('good') + '\n';
|
|
||||||
title += '>= -100 dBm i < -90 dBm ' + _t('fair') + '\n';
|
|
||||||
title += '< -100 dBm ' + _t('poor');
|
|
||||||
break;
|
|
||||||
case 'rsrq':
|
|
||||||
if (pvalue >= -10) { color = '#2bdf5a'; description += _t('excellent'); }
|
|
||||||
if (pvalue >= -15 && pvalue < -10 ) { color = '#efff12'; description += _t('good'); }
|
|
||||||
if (pvalue >= -20 && pvalue < -15 ) { color = '#f8c200'; description += _t('fair'); }
|
|
||||||
if (pvalue < -20) { color = '#fa0000'; description += _t('poor'); }
|
|
||||||
title += '>= -10 dB ' + _t('excellent') + '\n';
|
|
||||||
title += '>= -15 dB i < -10 dB ' + _t('good') + '\n';
|
|
||||||
title += '>= -20 dB i < -15 dB ' + _t('fair') + '\n';
|
|
||||||
title += '< -20 dB ' + _t('poor');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ', <span style="color:' + color + '" title="' + title + '">' + description + '</span>';
|
|
||||||
}
|
|
||||||
|
|
||||||
function modemaddon(idx) {
|
|
||||||
var htmlco = '';
|
|
||||||
var htmlxs = '';
|
|
||||||
var html = '';
|
|
||||||
var pcc = [];
|
|
||||||
var scc1 = [];
|
|
||||||
var scc2 = [];
|
|
||||||
var scc3 = [];
|
|
||||||
var scc4 = [];
|
|
||||||
var ulscc = [];
|
|
||||||
var sorted = sortJSON(arrmodemaddon[idx], 'idx', 'asc');
|
|
||||||
sorted.forEach(function(e) {
|
|
||||||
var description = '';
|
|
||||||
switch (e.idx) {
|
|
||||||
// MODE
|
|
||||||
case 1:
|
|
||||||
if ((e.value).search(/^LTE B/) > -1 || (e.value).search(/^LTE-A B/) > -1) {
|
|
||||||
pcc[1] = (e.value).replace(/^LTE /, '').replace(/^LTE-A /, '');
|
|
||||||
}
|
|
||||||
if ((e.value).search(/^5G/) > -1) {
|
|
||||||
pcc[1] = (e.value).replace(/^5G NSA /, '').replace(/^5G SA /, '');
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
// PCC
|
|
||||||
case 30:
|
|
||||||
if ((e.value).includes(' @')) {
|
|
||||||
pcc[1] = (e.value).split(' @')[0];
|
|
||||||
pcc[2] = (e.value).split(' @')[1];
|
|
||||||
} else {
|
|
||||||
pcc[1] = e.value;
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 31:
|
|
||||||
pcc[2] = e.value;
|
|
||||||
htmlxs += createRowForModal(e.key, e.value);
|
|
||||||
break;
|
|
||||||
case 32:
|
|
||||||
if (typeof pcc[2] === 'undefined') {
|
|
||||||
pcc[2] = e.value;
|
|
||||||
} else {
|
|
||||||
pcc[2] = e.value + ' DL<br>' + pcc[2] + ' UL'
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 33:
|
|
||||||
pcc[3] = e.value;
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 34:
|
|
||||||
if ((e.key).toLowerCase().includes('earfcn ul')) {
|
|
||||||
if (typeof pcc[4] === 'undefined') {
|
|
||||||
pcc[4] = e.value + ' UL';
|
|
||||||
} else {
|
|
||||||
pcc[4] = pcc[4] + ' DL<br>' + e.value + ' UL';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (typeof pcc[4] === 'undefined') {
|
|
||||||
pcc[4] = e.value;
|
|
||||||
} else {
|
|
||||||
pcc[4] = e.value + ' DL<br>' + pcc[4];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 35:
|
|
||||||
description = paramdesc('rssi', e.value);
|
|
||||||
pcc[5] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 36:
|
|
||||||
description = paramdesc('rsrp', e.value);
|
|
||||||
pcc[6] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 37:
|
|
||||||
description = paramdesc('rsrq', e.value);
|
|
||||||
pcc[7] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 38:
|
|
||||||
if ((e.key).toLowerCase().includes('sinr')) {
|
|
||||||
pcc[8] = e.value;
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(_t(e.key), e.value);
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
// SCC1
|
|
||||||
case 50:
|
|
||||||
if ((e.value).includes(' @')) {
|
|
||||||
scc1[1] = (e.value).split(' @')[0];
|
|
||||||
scc1[2] = (e.value).split(' @')[1];
|
|
||||||
} else {
|
|
||||||
scc1[1] = e.value;
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 52:
|
|
||||||
scc1[2] = e.value;
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 53:
|
|
||||||
scc1[3] = e.value;
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 54:
|
|
||||||
if (!(e.key).toLowerCase().includes('earfcn ul')) {
|
|
||||||
scc1[4] = e.value;
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(_t(e.key), e.value);
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 55:
|
|
||||||
description = paramdesc('rssi', e.value);
|
|
||||||
scc1[5] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 56:
|
|
||||||
description = paramdesc('rsrp', e.value);
|
|
||||||
scc1[6] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 57:
|
|
||||||
description = paramdesc('rsrq', e.value);
|
|
||||||
scc1[7] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 58:
|
|
||||||
if ((e.key).toLowerCase().includes('sinr')) {
|
|
||||||
scc1[8] = e.value;
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(e.key, e.value);
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
// SCC2
|
|
||||||
case 60:
|
|
||||||
if ((e.value).includes(' @')) {
|
|
||||||
scc2[1] = (e.value).split(' @')[0];
|
|
||||||
scc2[2] = (e.value).split(' @')[1];
|
|
||||||
} else {
|
|
||||||
scc2[1] = e.value;
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 62:
|
|
||||||
scc2[2] = e.value;
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 63:
|
|
||||||
scc2[3] = e.value;
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 64:
|
|
||||||
if (!(e.key).toLowerCase().includes('earfcn ul')) {
|
|
||||||
scc2[4] = e.value;
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(_t(e.key), e.value);
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 65:
|
|
||||||
description = paramdesc('rssi', e.value);
|
|
||||||
scc2[5] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 66:
|
|
||||||
description = paramdesc('rsrp', e.value);
|
|
||||||
scc2[6] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 67:
|
|
||||||
description = paramdesc('rsrq', e.value);
|
|
||||||
scc2[7] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 68:
|
|
||||||
if ((e.key).toLowerCase().includes('sinr')) {
|
|
||||||
scc2[8] = e.value;
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(_t(e.key), e.value);
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
// SCC3
|
|
||||||
case 70:
|
|
||||||
if ((e.value).includes(' @')) {
|
|
||||||
scc3[1] = (e.value).split(' @')[0];
|
|
||||||
scc3[2] = (e.value).split(' @')[1];
|
|
||||||
} else {
|
|
||||||
scc3[1] = e.value;
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 72:
|
|
||||||
scc3[2] = e.value;
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 73:
|
|
||||||
scc3[3] = e.value;
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 74:
|
|
||||||
if (!(e.key).toLowerCase().includes('earfcn ul')) {
|
|
||||||
scc3[4] = e.value;
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(e.key, e.value);
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 75:
|
|
||||||
description = paramdesc('rssi', e.value);
|
|
||||||
scc3[5] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 76:
|
|
||||||
description = paramdesc('rsrp', e.value);
|
|
||||||
scc3[6] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 77:
|
|
||||||
description = paramdesc('rsrq', e.value);
|
|
||||||
scc3[7] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 78:
|
|
||||||
if ((e.key).toLowerCase().includes('sinr')) {
|
|
||||||
scc3[8] = e.value;
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(_t(e.key), e.value);
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
// SCC4
|
|
||||||
case 80:
|
|
||||||
if ((e.value).includes(' @')) {
|
|
||||||
scc4[1] = (e.value).split(' @')[0];
|
|
||||||
scc4[2] = (e.value).split(' @')[1];
|
|
||||||
} else {
|
|
||||||
scc4[1] = e.value;
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 82:
|
|
||||||
scc4[2] = e.value;
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 83:
|
|
||||||
scc4[3] = e.value;
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 84:
|
|
||||||
if (!(e.key).toLowerCase().includes('earfcn ul')) {
|
|
||||||
scc4[4] = e.value;
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(_t(e.key), e.value);
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 85:
|
|
||||||
description = paramdesc('rssi', e.value);
|
|
||||||
scc4[5] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 86:
|
|
||||||
description = paramdesc('rsrp', e.value);
|
|
||||||
scc4[6] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 87:
|
|
||||||
description = paramdesc('rsrq', e.value);
|
|
||||||
scc4[7] = e.value + description.replace(', ', '<br>');
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value + description);
|
|
||||||
break;
|
|
||||||
case 88:
|
|
||||||
if ((e.key).toLowerCase().includes('sinr')) {
|
|
||||||
scc4[8] = e.value;
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(_t(e.key), e.value);
|
|
||||||
}
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
break;
|
|
||||||
case 150:
|
|
||||||
ulscc[1] = e.value;
|
|
||||||
htmlxs += createRowForModal(e.key, e.value);
|
|
||||||
break;
|
|
||||||
case 152:
|
|
||||||
ulscc[2] = e.value;
|
|
||||||
htmlxs += createRowForModal(e.key, e.value);
|
|
||||||
break;
|
|
||||||
case 153:
|
|
||||||
ulscc[3] = e.value;
|
|
||||||
htmlxs += createRowForModal(e.key, e.value);
|
|
||||||
break;
|
|
||||||
case 154:
|
|
||||||
ulscc[4] = e.value;
|
|
||||||
htmlxs += createRowForModal(e.key, e.value);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (e.idx < 30) {
|
|
||||||
htmlco += createRowForModal(_t(e.key), e.value);
|
|
||||||
} else {
|
|
||||||
html += createRowForModal(_t(e.key), e.value);
|
|
||||||
htmlxs += createRowForModal(_t(e.key), e.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
htmlco += '<div class="visible-xs-block visible-sm-block">' + htmlxs + '</div>';
|
|
||||||
if (pcc.length + scc1.length + scc2.length + scc3.length + scc4.length > 0) {
|
|
||||||
htmlco += '<div class="margintop hidden-xs hidden-sm">' + html;
|
|
||||||
if (pcc.length > 0) {
|
|
||||||
pcc[0] = 'PCC';
|
|
||||||
for (var idx = 0; idx <= 9; idx++) {
|
|
||||||
if (typeof pcc[idx] === 'undefined') { pcc[idx] = '-'; }
|
|
||||||
}
|
|
||||||
htmlco += createRow9ColForModal(['', _t('Band'), _t('Bandwidth'), 'PCI', 'EARFCN', 'RSSI', 'RSRP', 'RSRQ', 'SINR']);
|
|
||||||
htmlco += createRow9ColForModal(pcc);
|
|
||||||
}
|
|
||||||
if (scc1.length > 0) {
|
|
||||||
scc1[0] = 'SCC1';
|
|
||||||
for (var idx = 0; idx <= 9; idx++) {
|
|
||||||
if (typeof scc1[idx] === 'undefined') { scc1[idx] = '-'; }
|
|
||||||
}
|
|
||||||
htmlco += createRow9ColForModal(scc1);
|
|
||||||
}
|
|
||||||
if (scc2.length > 0) {
|
|
||||||
scc2[0] = 'SCC2';
|
|
||||||
for (var idx = 0; idx <= 9; idx++) {
|
|
||||||
if (typeof scc2[idx] === 'undefined') { scc2[idx] = '-'; }
|
|
||||||
}
|
|
||||||
htmlco += createRow9ColForModal(scc2);
|
|
||||||
}
|
|
||||||
if (scc3.length > 0) {
|
|
||||||
scc3[0] = 'SCC3';
|
|
||||||
for (var idx = 0; idx <= 9; idx++) {
|
|
||||||
if (typeof scc3[idx] === 'undefined') { scc3[idx] = '-'; }
|
|
||||||
}
|
|
||||||
htmlco += createRow9ColForModal(scc3);
|
|
||||||
}
|
|
||||||
if (scc4.length > 0) {
|
|
||||||
scc4[0] = 'SCC4';
|
|
||||||
for (var idx = 0; idx <= 9; idx++) {
|
|
||||||
if (typeof scc4[idx] === 'undefined') { scc4[idx] = '-'; }
|
|
||||||
}
|
|
||||||
htmlco += createRow9ColForModal(scc4);
|
|
||||||
}
|
|
||||||
if (ulscc.length > 0) {
|
|
||||||
ulscc[0] = 'UL SCC';
|
|
||||||
for (var idx = 0; idx <= 9; idx++) {
|
|
||||||
if (typeof ulscc[idx] === 'undefined') { ulscc[idx] = '-'; }
|
|
||||||
}
|
|
||||||
htmlco += createRow9ColForModal(ulscc);
|
|
||||||
}
|
|
||||||
htmlco += '</div>';
|
|
||||||
}
|
|
||||||
showMsg(htmlco);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
window.onload = info_onload;
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,53 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# (c) 2024-2025 Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
#
|
|
||||||
|
|
||||||
. /lib/functions.sh
|
|
||||||
|
|
||||||
RES="/usr/share/modemdata"
|
|
||||||
ECM=""
|
|
||||||
|
|
||||||
SEPARATOR=""
|
|
||||||
parse_section() {
|
|
||||||
[ -n "$SEPARATOR" ] && echo "$SEPARATOR"
|
|
||||||
local section="$1"
|
|
||||||
config_get device "$section" device ""
|
|
||||||
config_get network "$section" network ""
|
|
||||||
config_get force_plmn "$section" force_plmn "0"
|
|
||||||
|
|
||||||
if echo "x$device" | grep -q "192.168."; then
|
|
||||||
ECM="$RES/addon/ecm/huawei.sh $device"
|
|
||||||
else
|
|
||||||
ECM=""
|
|
||||||
if [ ! -e /var/state/3ginfo-detected ]; then
|
|
||||||
[ -z "$device" ] && device=$(/usr/share/3ginfo/detectdevice.sh)
|
|
||||||
[ -z "$network" ] && network=$(/usr/share/3ginfo/detectsection.sh "$section")
|
|
||||||
fi
|
|
||||||
config_get pincode "$section" pincode ""
|
|
||||||
if [ -n "$pincode" ] && [ ! -e /var/state/3ginfo-pincode ]; then
|
|
||||||
[ -n "$device" ] && sms_tool -d "$device" at "at+cpin=\"$pincode\""
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo "["
|
|
||||||
$RES/network.sh "$network" | tr -d '\n'
|
|
||||||
echo ","
|
|
||||||
if [ -n "$ECM" ]; then
|
|
||||||
$ECM params
|
|
||||||
else
|
|
||||||
$RES/params.sh "$device" "$force_plmn" | tr -d '\n'
|
|
||||||
fi
|
|
||||||
echo "]"
|
|
||||||
SEPARATOR=","
|
|
||||||
}
|
|
||||||
|
|
||||||
config_load 3ginfo
|
|
||||||
echo -e "Content-type: application/json\n\n"
|
|
||||||
echo '{"res":['
|
|
||||||
config_foreach parse_section 3ginfo
|
|
||||||
echo ']}'
|
|
||||||
touch /var/state/3ginfo-detected
|
|
||||||
touch /var/state/3ginfo-pincode
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# (c) 2024-2025 Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
#
|
|
||||||
|
|
||||||
. /lib/functions.sh
|
|
||||||
|
|
||||||
RES="/usr/share/modemdata"
|
|
||||||
|
|
||||||
SEPARATOR=""
|
|
||||||
parse_section() {
|
|
||||||
[ -n "$SEPARATOR" ] && echo "$SEPARATOR"
|
|
||||||
local section="$1"
|
|
||||||
local device
|
|
||||||
local network
|
|
||||||
config_get device "$section" device ""
|
|
||||||
|
|
||||||
if echo "x$device" | grep -q "192.168."; then
|
|
||||||
$RES/addon/ecm/huawei.sh $device product
|
|
||||||
else
|
|
||||||
if [ ! -e /var/state/3ginfo-detected ]; then
|
|
||||||
[ -z "$device" ] && device=$(/usr/share/3ginfo/detectdevice.sh)
|
|
||||||
fi
|
|
||||||
config_get pincode "$section" pincode ""
|
|
||||||
if [ -n "$pincode" ] && [ ! -e /var/state/3ginfo-pincode ]; then
|
|
||||||
[ -n "$device" ] && sms_tool -d "$device" at "at+cpin=\"$pincode\""
|
|
||||||
fi
|
|
||||||
$RES/product.sh "$device" | tr -d '\n'
|
|
||||||
fi
|
|
||||||
SEPARATOR=","
|
|
||||||
}
|
|
||||||
|
|
||||||
config_load 3ginfo
|
|
||||||
echo -e "Content-type: application/json\n\n"
|
|
||||||
echo '{"res":['
|
|
||||||
config_foreach parse_section 3ginfo
|
|
||||||
echo ']}'
|
|
||||||
touch /var/state/3ginfo-detected
|
|
||||||
touch /var/state/3ginfo-pincode
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
/**
|
|
||||||
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
|
||||||
*/
|
|
||||||
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
{
|
|
||||||
"device": "Urządzenie",
|
|
||||||
"vendor": "Producent",
|
|
||||||
"product": "Model",
|
|
||||||
"revision": "Wersja",
|
|
||||||
"imei": "Identyfikator modemu (IMEI)",
|
|
||||||
"iccid": "Numer karty SIM (ICCID)",
|
|
||||||
"imsi": "Identyfikator abonenta (IMSI)",
|
|
||||||
"parameters": "Parametry",
|
|
||||||
"signal": "Sygnał",
|
|
||||||
"mode": "Technologia",
|
|
||||||
"simstatus": "Status karty SIM",
|
|
||||||
"more": "więcej parametrów",
|
|
||||||
"btslocation": "lokalizacja stacji bazowej",
|
|
||||||
"connection": "Połączenie z internetem",
|
|
||||||
"connectiontime": "Czas połączenia",
|
|
||||||
"tx": "Wysłano",
|
|
||||||
"rx": "Pobrano",
|
|
||||||
"registered0": "Brak sieci",
|
|
||||||
"registered1": "Zalogowana do sieci macierzystej",
|
|
||||||
"registered2": "Wyszukiwanie operatora",
|
|
||||||
"registered3": "Odmowa dostępu",
|
|
||||||
"registered5": "Zalogowana do sieci w roamingu",
|
|
||||||
"registered6": "Zalogowana do sieci macierzystej, tylko SMS",
|
|
||||||
"registered7": "Zalogowana do sieci w roamingu, tylko SMS",
|
|
||||||
"since": "od",
|
|
||||||
"h": "g",
|
|
||||||
"temperature": "Temperatura",
|
|
||||||
"band": "Pasmo",
|
|
||||||
"primaryband": "Pasmo podstawowe",
|
|
||||||
"bandwidth": "Szerokość",
|
|
||||||
"excellent": "doskonały",
|
|
||||||
"good": "dobry",
|
|
||||||
"fair": "słaby",
|
|
||||||
"poor": "zły",
|
|
||||||
"verypoor": "bardzo zły",
|
|
||||||
"pleasewait": "Proszę czekać",
|
|
||||||
"country": "Kraj"
|
|
||||||
}
|
|
||||||
@@ -1,145 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<meta name="author" content="cezary@eko.one.pl">
|
|
||||||
<title>3G/4G/5G</title>
|
|
||||||
<link href="/bootstrap.min.css?v=1" rel="stylesheet">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="/html5shiv.min.js?v=1"></script>
|
|
||||||
<script src="/respond.min.js?v=1"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link href="/3ginfo.css?v=1" rel="stylesheet">
|
|
||||||
<script src="/3ginfo.js?v=1"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div class="container">
|
|
||||||
<div id="div_content">
|
|
||||||
<div id="div_template" style="display:none">
|
|
||||||
<h3 class="section" data-i18n="device">Device</h3>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="vendor">Vendor</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="vendor_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="product">Product</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="product_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="revision">Revision</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="revision_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="imei">International Mobile Equipment Identity (IMEI)</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="imei_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="iccid">SIM number (ICCID)</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="iccid_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="imsi">International Mobile Subscriber Identity (IMSI)</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="imsi_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3 class="section" data-i18n="parameters">Parameters</h3>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="operator">Operator</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="operator_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="signal">Signal</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="signal_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="mode">Mode</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="mode_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="simstatus">SIM status</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="registration_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row" id="div_addon_idx" style="display:none;">
|
|
||||||
<div class="col-xs-6 col-xs-offset-6">
|
|
||||||
<p><a href="#" class="click" onclick="modemaddon(_idx);" data-i18n="more">more parameters</a></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row" id="div_btsearch_idx" style="display:none;">
|
|
||||||
<div class="col-xs-6 col-xs-offset-6">
|
|
||||||
<p><a href="#" id="btsearch_idx" class="click" target="_blank" data-i18n="btslocation">BTS location</a> →</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4 center-xd">
|
|
||||||
<div class="signal-bars sizing-box lzero one-bar" id="signal_bars_idx">
|
|
||||||
<div class="first-bar bar"></div>
|
|
||||||
<div class="second-bar bar"></div>
|
|
||||||
<div class="third-bar bar"></div>
|
|
||||||
<div class="fourth-bar bar"></div>
|
|
||||||
<div class="fifth-bar bar"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3 class="section" data-i18n="connection">Connection</h3>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="connectiontime">Connection time</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p><span id="uptime_idx">-</span><span class="visible-xs oneline"></span><span id="uptime_since_idx"></span></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="tx">Uploaded</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="tx_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-6 text-right" data-i18n="rx">Downloaded</div>
|
|
||||||
<div class="col-xs-6">
|
|
||||||
<p id="rx_idx">-</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="div_modems">
|
|
||||||
<div class="flex-center position-ref full-height">
|
|
||||||
<div class="flex-content">
|
|
||||||
<div data-i18n="pleasewait">Please wait</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="div_msg" class="modal">
|
|
||||||
<div id="msgtxt" class="modal-content text-center" data-i18n="pleasewait">Please wait</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="text-center"> </div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
|
|
||||||
* Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
|
|
||||||
* */
|
|
||||||
|
|
||||||
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.01
|
|
||||||
waitquiet 0.01 0.01
|
|
||||||
|
|
||||||
let $c="AT+CSQ^m"
|
|
||||||
let $r="+CSQ"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+COPS=3,0;+COPS?^m"
|
|
||||||
let $r="+COPS"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+COPS=3,2;+COPS?^m"
|
|
||||||
let $r="+COPS"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+CREG=2;+CREG?^m"
|
|
||||||
let $r="+CREG"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+CPIN?^m"
|
|
||||||
let $r="+CPIN"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:readatcmd
|
|
||||||
let i=15
|
|
||||||
send $c
|
|
||||||
:loop
|
|
||||||
get 0.1 "^m" $s
|
|
||||||
let l=len($r)
|
|
||||||
if len($s) < l goto loop1
|
|
||||||
if $mid($s,1,l) <> $r goto loop1
|
|
||||||
print $s
|
|
||||||
return
|
|
||||||
|
|
||||||
:loop1
|
|
||||||
if len($s) < 2 goto loop2
|
|
||||||
if $mid($s,1,2) = "ER" return
|
|
||||||
if $mid($s,1,2) = "CO" return
|
|
||||||
if len($s) < 10 goto loop2
|
|
||||||
if $mid($s,1,10) != "+CME ERROR" goto loop2
|
|
||||||
print $s
|
|
||||||
return
|
|
||||||
:loop2
|
|
||||||
if i = 0 exit 0
|
|
||||||
let i=i-1
|
|
||||||
goto loop
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# (c) 2010-2019 Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
#
|
|
||||||
|
|
||||||
RES="/usr/share/3ginfo-lite"
|
|
||||||
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
if [ "x$DEVICE" = "x" ]; then
|
|
||||||
touch /tmp/modem
|
|
||||||
DEVICE=$(cat /tmp/modem)
|
|
||||||
else
|
|
||||||
echo "$DEVICE" > /tmp/modem
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "x$DEVICE" = "x" ]; then
|
|
||||||
devices=$(ls /dev/ttyUSB* /dev/cdc-wdm* /dev/ttyACM* /dev/ttyHS* 2>/dev/null | sort -r)
|
|
||||||
for d in $devices; do
|
|
||||||
DEVICE=$d gcom -s $RES/probeport.gcom > /dev/null 2>&1
|
|
||||||
if [ $? = 0 ]; then
|
|
||||||
echo "$d" > /tmp/modem
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
DEVICE=$(cat /tmp/modem)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "x$DEVICE" = "x" ]; then
|
|
||||||
echo '{"error":"Device not found"}'
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
O=$(gcom -d $DEVICE -s $RES/3ginfo.gcom 2>/dev/null)
|
|
||||||
|
|
||||||
# CSQ
|
|
||||||
CSQ=$(echo "$O" | awk -F[,\ ] '/^\+CSQ/ {print $2}')
|
|
||||||
|
|
||||||
[ "x$CSQ" = "x" ] && CSQ=-1
|
|
||||||
if [ $CSQ -ge 0 -a $CSQ -le 31 ]; then
|
|
||||||
CSQ_PER=$(($CSQ * 100/31))
|
|
||||||
else
|
|
||||||
CSQ="-"
|
|
||||||
CSQ_PER="0"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# COPS numeric
|
|
||||||
COPS_NUM=$(echo "$O" | awk -F[\"] '/^\+COPS: .,2/ {print $2}' | head -1)
|
|
||||||
if [ "x$COPS_NUM" = "x" ]; then
|
|
||||||
COPS_NUM="-"
|
|
||||||
COPS_MCC="-"
|
|
||||||
COPS_MNC="-"
|
|
||||||
else
|
|
||||||
COPS_MCC=${COPS_NUM:0:3}
|
|
||||||
COPS_MNC=${COPS_NUM:3:3}
|
|
||||||
COPS=$(awk -F[\;] '/'$COPS_NUM'/ {print $2}' $RES/mccmnc.dat)
|
|
||||||
fi
|
|
||||||
[ "x$COPS" = "x" ] && COPS=$COPS_NUM
|
|
||||||
|
|
||||||
if [ -z "$FORCE_PLMN" ]; then
|
|
||||||
# COPS alphanumeric
|
|
||||||
T=$(echo "$O" | awk -F[\"] '/^\+COPS: .,0/ {print $2}')
|
|
||||||
[ "x$T" != "x" ] && COPS="$T"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# CREG
|
|
||||||
eval $(echo "$O" | busybox awk -F[,] '/^\+CREG/ {gsub(/[[:space:]"]+/,"");printf "T=\"%d\";LAC_HEX=\"%X\";CID_HEX=\"%X\";LAC_DEC=\"%d\";CID_DEC=\"%d\";MODE1=\"%d\"", $2, "0x"$3, "0x"$4, "0x"$3, "0x"$4, $5}')
|
|
||||||
case "$T" in
|
|
||||||
0*) REG="0";;
|
|
||||||
1*) REG="1";;
|
|
||||||
2*) REG="2";;
|
|
||||||
3*) REG="3";;
|
|
||||||
5*) REG="5";;
|
|
||||||
*) REG="-";;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# MODE
|
|
||||||
[ -z "$MODE1" -o "x$MODE1" = "x0" ] && MODE1=$(echo "$O" | awk -F[,] '/^\+COPS/ {print $4;exit}')
|
|
||||||
case "$MODE1" in
|
|
||||||
2*) MODE="UMTS";;
|
|
||||||
3*) MODE="EDGE";;
|
|
||||||
4*) MODE="HSDPA";;
|
|
||||||
5*) MODE="HSUPA";;
|
|
||||||
6*) MODE="HSPA";;
|
|
||||||
7*) MODE="LTE";;
|
|
||||||
*) MODE="-";;
|
|
||||||
esac
|
|
||||||
|
|
||||||
T=$(echo "$O" | awk -F[,\ ] '/^\+CME ERROR:/ {print $0;exit}')
|
|
||||||
if [ -n "$T" ]; then
|
|
||||||
case "$T" in
|
|
||||||
"+CME ERROR: 10"*) REG="SIM not inserted";;
|
|
||||||
"+CME ERROR: 11"*) REG="SIM PIN required";;
|
|
||||||
"+CME ERROR: 12"*) REG="SIM PUK required";;
|
|
||||||
"+CME ERROR: 13"*) REG="SIM failure";;
|
|
||||||
"+CME ERROR: 14"*) REG="SIM busy";;
|
|
||||||
"+CME ERROR: 15"*) REG="SIM wrong";;
|
|
||||||
"+CME ERROR: 17"*) REG="SIM PIN2 required";;
|
|
||||||
"+CME ERROR: 18"*) REG="SIM PUK2 required";;
|
|
||||||
*) REG=$(echo "$T" | cut -f2 -d: | xargs);;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
cat <<EOF
|
|
||||||
{
|
|
||||||
"csq":"$CSQ",
|
|
||||||
"signal":"$CSQ_PER",
|
|
||||||
"operator_name":"$COPS",
|
|
||||||
"operator_mcc":"$COPS_MCC",
|
|
||||||
"operator_mnc":"$COPS_MNC",
|
|
||||||
"mode":"$MODE",
|
|
||||||
"registration":"$REG",
|
|
||||||
"lac_dec":"$LAC_DEC",
|
|
||||||
"lac_hex":"$LAC_HEX",
|
|
||||||
"cid_dec":"$CID_DEC",
|
|
||||||
"cid_hex":"$CID_HEX"
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
exit 0
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
echo "Content-type: application/json"
|
|
||||||
echo ""
|
|
||||||
if [ -e /dev/cdc-wdm0 ]; then
|
|
||||||
uqmi -s -d /dev/cdc-wdm0 --get-signal-info | sed 's/"type":"hdr".*,"type"/"type"/g'
|
|
||||||
else
|
|
||||||
echo "{}"
|
|
||||||
fi
|
|
||||||
exit 0
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="pl">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<meta name="description" content="Status" />
|
|
||||||
<meta name="author" content="Cezary Jackiewicz">
|
|
||||||
<title>QMI</title>
|
|
||||||
<link rel="icon" href="/favicon.ico">
|
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
|
||||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div class="container">
|
|
||||||
<p> </p>
|
|
||||||
<table class='table table-condensed table-striped'>
|
|
||||||
<colgroup><col class='col-xs-4'><col class='col-xs-2'><col class='col-xs-2'><col class='col-xs-2'><col class='col-xs-2'></colgroup>
|
|
||||||
|
|
||||||
<thead><tr><th>Parametr</th><th>Wartość</th><th>Min</th><th>Max</th><th>Jednostka</th></tr></thead>
|
|
||||||
<tbody>
|
|
||||||
<tr><td><span id='key1'> </span></td><td><span id='val1'></span></td><td><span id='min1'></span></td><td><span id='max1'></span></td><td><span id='unit1'></span></td></tr>
|
|
||||||
<tr><td><span id='key2'> </span></td><td><span id='val2'></span></td><td><span id='min2'></span></td><td><span id='max2'></span></td><td><span id='unit2'></span></td></tr>
|
|
||||||
<tr><td><span id='key3'> </span></td><td><span id='val3'></span></td><td><span id='min3'></span></td><td><span id='max3'></span></td><td><span id='unit3'></span></td></tr>
|
|
||||||
<tr><td><span id='key4'> </span></td><td><span id='val4'></span></td><td><span id='min4'></span></td><td><span id='max4'></span></td><td><span id='unit4'></span></td></tr>
|
|
||||||
<tr><td><span id='key5'> </span></td><td><span id='val5'></span></td><td><span id='min5'></span></td><td><span id='max5'></span></td><td><span id='unit5'></span></td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div id="div_g" style="width:100%; height:300px;"><p class="text-center">Trwa zbieranie danych...</p></div>
|
|
||||||
<p><i>Interwał 3s, okno 15 minut.</i></p>
|
|
||||||
</div>
|
|
||||||
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
|
|
||||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/dygraph/1.1.1/dygraph-combined.js"></script>
|
|
||||||
<script src="/qmisignal.js"></script>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
var data = [];
|
|
||||||
var g;
|
|
||||||
var min = [], max = [];
|
|
||||||
|
|
||||||
var colors = [];
|
|
||||||
colors['signal'] = '#333';
|
|
||||||
colors['rssi'] = '#333';
|
|
||||||
colors['rsrp'] = '#333';
|
|
||||||
colors['ecio'] = '#333';
|
|
||||||
colors['rsrq'] = '#333';
|
|
||||||
colors['snr'] = '#333';
|
|
||||||
|
|
||||||
window.intervalId = setInterval(function() {
|
|
||||||
$.getJSON( "/cgi-bin/qmisignal.sh", function(data1) {
|
|
||||||
|
|
||||||
var idx=0
|
|
||||||
$.each(data1, function(i, val) {
|
|
||||||
idx++;
|
|
||||||
|
|
||||||
unit='';
|
|
||||||
if (!min[i]) {min[i]=999;max[i]=-999;}
|
|
||||||
|
|
||||||
switch(i) {
|
|
||||||
case "type":
|
|
||||||
val=(val).toUpperCase();
|
|
||||||
break;
|
|
||||||
case "signal":
|
|
||||||
case "rssi":
|
|
||||||
case "rsrp":
|
|
||||||
if (val < min[i]) {min[i] = val;}
|
|
||||||
if (val > max[i]) {max[i] = val;}
|
|
||||||
unit='dBm'
|
|
||||||
break;
|
|
||||||
case "ecio":
|
|
||||||
case "rsrq":
|
|
||||||
case "snr":
|
|
||||||
if (val < min[i]) {min[i] = val;}
|
|
||||||
if (val > max[i]) {max[i] = val;}
|
|
||||||
unit='dB'
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$("#key"+idx).text(''+i);
|
|
||||||
$("#val"+idx).text(''+val);
|
|
||||||
$('#val'+idx).css('color', colors[i]);
|
|
||||||
$("#unit"+idx).text(''+unit);
|
|
||||||
$('#unit'+idx).css('color', colors[i]);
|
|
||||||
if (i != 'type')
|
|
||||||
{
|
|
||||||
$("#min"+idx).text(''+min[i]);
|
|
||||||
$('#min'+idx).css('color', colors[i]);
|
|
||||||
$("#max"+idx).text(''+max[i]);
|
|
||||||
$('#max'+idx).css('color', colors[i]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
data.push([new Date(),
|
|
||||||
data1["signal"],
|
|
||||||
data1["rssi"],
|
|
||||||
data1["rsrp"],
|
|
||||||
data1["ecio"],
|
|
||||||
data1["rsrq"],
|
|
||||||
data1["snr"]
|
|
||||||
]);
|
|
||||||
|
|
||||||
if (data.length > 300) {data.shift();}
|
|
||||||
if (g==null) {
|
|
||||||
g = new Dygraph(document.getElementById("div_g"), data, {
|
|
||||||
drawPoints: false,
|
|
||||||
showRoller: false,
|
|
||||||
labels: ['', 'Signal', 'RSSI', 'RSRP', 'ECIO', 'RSRQ', 'SNR'],
|
|
||||||
labelsSeparateLines: true,
|
|
||||||
ylabel: 'RSSI, RSRP [dBm]',
|
|
||||||
y2label: 'ECIO, RSRQ, SNR [dB]',
|
|
||||||
series : {
|
|
||||||
'ECIO': {axis: 'y2'},
|
|
||||||
'RSRQ': {axis: 'y2'},
|
|
||||||
'SNR': {axis: 'y2'}
|
|
||||||
},
|
|
||||||
axes: {
|
|
||||||
y: {independentTicks: true},
|
|
||||||
y2: {
|
|
||||||
independentTicks: true,
|
|
||||||
ticker: Dygraph.numericLinearTicks,
|
|
||||||
drawGrid: true,
|
|
||||||
gridLineColor: "#ff0000",
|
|
||||||
gridLinePattern: [4,4]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
var tcolors = g.getColors();
|
|
||||||
colors['signal'] = tcolors[0];
|
|
||||||
colors['rssi'] = tcolors[1];
|
|
||||||
colors['rsrp'] = tcolors[2];
|
|
||||||
colors['ecio'] = tcolors[3];
|
|
||||||
colors['rsrq'] = tcolors[4];
|
|
||||||
colors['snr'] = tcolors[5];
|
|
||||||
} else {
|
|
||||||
g.updateOptions({'file':data});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, 3000);
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
config 3ginfo
|
|
||||||
option device ''
|
|
||||||
option http_port '81'
|
|
||||||
option language 'pl'
|
|
||||||
option network 'wan'
|
|
||||||
option pincode ''
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
case "$ACTION" in
|
|
||||||
remove)
|
|
||||||
[ -f /tmp/pincode_was_given ] && rm -f /tmp/pincode_was_given;;
|
|
||||||
esac
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
ln -s /usr/share/3ginfo/cgi-bin/3ginfo.sh /usr/bin/3ginfo
|
|
||||||
exit 0
|
|
||||||
@@ -1,593 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# (c) 2010-2026 Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
#
|
|
||||||
|
|
||||||
# Output format
|
|
||||||
# 0 - html
|
|
||||||
# 1 - txt
|
|
||||||
# 2 - json
|
|
||||||
|
|
||||||
FORMAT=1
|
|
||||||
RES="/usr/share/3ginfo"
|
|
||||||
|
|
||||||
LANG=$(uci -q get 3ginfo.@3ginfo[0].language)
|
|
||||||
[ "x$LANG" = "x" ] && LANG="en"
|
|
||||||
|
|
||||||
getpath() {
|
|
||||||
devname="$(basename "$1")"
|
|
||||||
case "$devname" in
|
|
||||||
'tty'*)
|
|
||||||
devpath="$(readlink -f /sys/class/tty/$devname/device)"
|
|
||||||
P=${devpath%/*/*}
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)"
|
|
||||||
P=${devpath%/*}
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
showjsonerror() {
|
|
||||||
echo "{\"error\": \"$1\"}"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "x$1" = "xjson" ]; then
|
|
||||||
FORMAT=2
|
|
||||||
else
|
|
||||||
if [ "`basename $0`" = "3ginfo" ]; then
|
|
||||||
FORMAT=1
|
|
||||||
else
|
|
||||||
FORMAT=0
|
|
||||||
echo -e "Content-type: text/html\n\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -e $RES/msg.dat.$LANG ]; then
|
|
||||||
echo "File missing: $RES/msg.dat.$LANG"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
. $RES/msg.dat.$LANG
|
|
||||||
fi
|
|
||||||
|
|
||||||
# odpytanie urzadzenia
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
|
|
||||||
if echo "x$DEVICE" | grep -q "192.168."; then
|
|
||||||
if grep -q "Vendor=1bbb" /sys/kernel/debug/usb/devices; then
|
|
||||||
O=$($RES/scripts/alcatel_hilink.sh $DEVICE)
|
|
||||||
fi
|
|
||||||
if grep -q "Vendor=12d1" /sys/kernel/debug/usb/devices; then
|
|
||||||
O=$($RES/scripts/huawei_hilink.sh $DEVICE)
|
|
||||||
fi
|
|
||||||
if grep -q "Vendor=19d2" /sys/kernel/debug/usb/devices; then
|
|
||||||
O=$($RES/scripts/zte.sh $DEVICE)
|
|
||||||
fi
|
|
||||||
SEC=$(uci -q get 3ginfo.@3ginfo[0].network)
|
|
||||||
SEC=${SEC:-wan}
|
|
||||||
else
|
|
||||||
if [ "x$DEVICE" = "x" ]; then
|
|
||||||
devices=$(ls /dev/ttyUSB* /dev/cdc-wdm* /dev/ttyACM* /dev/ttyHS* 2>/dev/null | sort -r);
|
|
||||||
for d in $devices; do
|
|
||||||
DEVICE=$d gcom -s $RES/scripts/probeport.gcom > /dev/null 2>&1
|
|
||||||
if [ $? = 0 ]; then
|
|
||||||
uci set 3ginfo.@3ginfo[0].device="$d"
|
|
||||||
uci commit 3ginfo
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "x$DEVICE" = "x" ]; then
|
|
||||||
[ $FORMAT -eq 0 ] && echo "<h3 style='color:red;' class=\"c\">$NOTDETECTED</h3>"
|
|
||||||
[ $FORMAT -eq 1 ] && echo $NOTDETECTED
|
|
||||||
[ $FORMAT -eq 2 ] && showjsonerror "NOTDETECTED"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -e $DEVICE ]; then
|
|
||||||
[ $FORMAT -eq 0 ] && echo "<h3 style='color:red;' class=\"c\">$NODEVICE $DEVICE!</h3>"
|
|
||||||
[ $FORMAT -eq 1 ] && echo "$NODEVICE $DEVICE."
|
|
||||||
[ $FORMAT -eq 2 ] && showjsonerror "NODEVICE $DEVICE"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# znajdz odpowiednia sekcje w konfiguracji
|
|
||||||
SEC=$(uci -q get 3ginfo.@3ginfo[0].network)
|
|
||||||
if [ -z "$SEC" ]; then
|
|
||||||
getpath $DEVICE
|
|
||||||
PORIG=$P
|
|
||||||
for DEV in /sys/class/tty/* /sys/class/usbmisc/*; do
|
|
||||||
getpath "/dev/"${DEV##/*/}
|
|
||||||
if [ "x$PORIG" = "x$P" ]; then
|
|
||||||
SEC=$(uci show network | grep "/dev/"${DEV##/*/} | cut -f2 -d.)
|
|
||||||
[ -n "$SEC" ] && break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# [ "${DEVICE%%[0-9]}" = "/dev/ttyUSB" ] && stty -F $DEVICE -iexten -opost -icrnl
|
|
||||||
|
|
||||||
# daj pin jak jest taka potrzeba
|
|
||||||
if [ ! -f /tmp/pincode_was_given ]; then
|
|
||||||
# tylko za pierwszym razem
|
|
||||||
if [ ! -z $SEC ]; then
|
|
||||||
PINCODE=$(uci -q get network.$SEC.pincode)
|
|
||||||
fi
|
|
||||||
if [ -z "$PINCODE" ]; then
|
|
||||||
PINCODE=$(uci -q get 3ginfo.@3ginfo[0].pincode)
|
|
||||||
fi
|
|
||||||
if [ ! -z $PINCODE ]; then
|
|
||||||
PINCODE="$PINCODE" gcom -d "$DEVICE" -s /etc/gcom/setpin.gcom > /dev/null || {
|
|
||||||
[ $FORMAT -eq 0 ] && echo "<h3 style='color:red;' class=\"c\">$PINERROR</h3>"
|
|
||||||
[ $FORMAT -eq 1 ] && echo "$PINERROR"
|
|
||||||
[ $FORMAT -eq 2 ] && showjsonerror "PINERROR"
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
touch /tmp/pincode_was_given
|
|
||||||
fi
|
|
||||||
|
|
||||||
O=$(gcom -d $DEVICE -s $RES/scripts/3ginfo.gcom 2>/dev/null)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "x$1" = "xtest" ]; then
|
|
||||||
echo "$O"
|
|
||||||
echo "---------------------------------------------------------------"
|
|
||||||
ls /dev/tty*
|
|
||||||
echo "---------------------------------------------------------------"
|
|
||||||
cat /sys/kernel/debug/usb/devices
|
|
||||||
echo "---------------------------------------------------------------"
|
|
||||||
uci show 3ginfo
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# CSQ
|
|
||||||
CSQ=$(echo "$O" | awk -F[,\ ] '/^\+CSQ/ {print $2}')
|
|
||||||
|
|
||||||
[ "x$CSQ" = "x" ] && CSQ=-1
|
|
||||||
if [ $CSQ -ge 0 -a $CSQ -le 31 ]; then
|
|
||||||
|
|
||||||
# for Gargoyle
|
|
||||||
[ -e /tmp/strength.txt ] && echo "+CSQ: $CSQ,99" > /tmp/strength.txt
|
|
||||||
|
|
||||||
CSQ_PER=$(($CSQ * 100/31))
|
|
||||||
CSQ_COL="red"
|
|
||||||
[ $CSQ -ge 10 ] && CSQ_COL="orange"
|
|
||||||
[ $CSQ -ge 15 ] && CSQ_COL="yellow"
|
|
||||||
[ $CSQ -ge 20 ] && CSQ_COL="green"
|
|
||||||
CSQ_RSSI=$((2 * CSQ - 113))
|
|
||||||
else
|
|
||||||
CSQ="-"
|
|
||||||
CSQ_PER="0"
|
|
||||||
CSQ_COL="black"
|
|
||||||
CSQ_RSSI="-"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# COPS
|
|
||||||
COPS_NUM=$(echo "$O" | awk -F[\"] '/^\+COPS: .,2/ {print $2}')
|
|
||||||
if [ "x$COPS_NUM" = "x" ]; then
|
|
||||||
COPS_NUM="-"
|
|
||||||
COPS_MCC="-"
|
|
||||||
COPS_MNC="-"
|
|
||||||
else
|
|
||||||
COPS_MCC=${COPS_NUM:0:3}
|
|
||||||
COPS_MNC=${COPS_NUM:3:3}
|
|
||||||
COPS=$(awk -F[\;] '/'$COPS_NUM'/ {print $2}' $RES/mccmnc.dat)
|
|
||||||
[ "x$COPS" = "x" ] && COPS="-"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# dla modemow Option i ZTE
|
|
||||||
if [ "$COPS_NUM" = "-" ]; then
|
|
||||||
COPS=$(echo "$O" | awk -F[\"] '/^\+COPS: .,0/ {print $2}')
|
|
||||||
[ "x$COPS" = "x" ] && COPS="---"
|
|
||||||
|
|
||||||
COPS_TMP=$(awk -F[\;] 'BEGIN {IGNORECASE = 1} /'"$COPS"'/ {print $2}' $RES/mccmnc.dat)
|
|
||||||
if [ "x$COPS_TMP" = "x" ]; then
|
|
||||||
COPS_NUM="-"
|
|
||||||
COPS_MCC="-"
|
|
||||||
COPS_MNC="-"
|
|
||||||
else
|
|
||||||
COPS="$COPS_TMP"
|
|
||||||
COPS_NUM=$(awk -F[\;] 'BEGIN {IGNORECASE = 1} /'"$COPS"'/ {print $1}' $RES/mccmnc.dat)
|
|
||||||
COPS_MCC=${COPS_NUM:0:3}
|
|
||||||
COPS_MNC=${COPS_NUM:3:3}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Technologia
|
|
||||||
MODE="-"
|
|
||||||
|
|
||||||
# Nowe Huawei
|
|
||||||
TECH=$(echo "$O" | awk -F[,] '/^\^SYSINFOEX/ {print $9}' | sed 's/"//g')
|
|
||||||
if [ "x$TECH" != "x" ]; then
|
|
||||||
MODE=$(echo "$TECH" | sed 's/-//g')
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Starsze modele Huawei i inne pozostale
|
|
||||||
if [ "x$MODE" = "x-" ]; then
|
|
||||||
TECH=$(echo "$O" | awk -F[,] '/^\^SYSINFO/ {print $7}')
|
|
||||||
case $TECH in
|
|
||||||
17*) MODE="HSPA+ (64QAM)";;
|
|
||||||
18*) MODE="HSPA+ (MIMO)";;
|
|
||||||
1*) MODE="GSM";;
|
|
||||||
2*) MODE="GPRS";;
|
|
||||||
3*) MODE="EDGE";;
|
|
||||||
4*) MODE="UMTS";;
|
|
||||||
5*) MODE="HSDPA";;
|
|
||||||
6*) MODE="HSUPA";;
|
|
||||||
7*) MODE="HSPA";;
|
|
||||||
9*) MODE="HSPA+";;
|
|
||||||
*) MODE="-";;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ZTE
|
|
||||||
if [ "x$MODE" = "x-" ]; then
|
|
||||||
TECH=$(echo "$O" | awk -F[,\ ] '/^\+ZPAS/ {print $2}' | sed 's/"//g')
|
|
||||||
if [ "x$TECH" != "x" -a "x$TECH" != "xNo" ]; then
|
|
||||||
MODE="$TECH"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# OPTION
|
|
||||||
if [ "x$MODE" = "x-" ]; then
|
|
||||||
TECH=$(echo "$O" | awk -F, '/^\+COPS: 0/ {print $4}')
|
|
||||||
MODE="-"
|
|
||||||
if [ "$TECH" = 0 ]; then
|
|
||||||
TECH1=$(echo "$O" | awk '/^_OCTI/ {print $2}' | cut -f1 -d,)
|
|
||||||
case $TECH1 in
|
|
||||||
1*) MODE="GSM";;
|
|
||||||
2*) MODE="GPRS";;
|
|
||||||
3*) MODE="EDGE";;
|
|
||||||
*) MODE="-";;
|
|
||||||
esac
|
|
||||||
elif [ "$TECH" = 2 ]; then
|
|
||||||
TECH1=$(echo "$O" | awk '/^_OWCTI/ {print $2}')
|
|
||||||
case $TECH1 in
|
|
||||||
1*) MODE="UMTS";;
|
|
||||||
2*) MODE="HSDPA";;
|
|
||||||
3*) MODE="HSUPA";;
|
|
||||||
4*) MODE="HSPA";;
|
|
||||||
*) MODE="-";;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Sierra
|
|
||||||
if [ "x$MODE" = "x-" ]; then
|
|
||||||
TECH=$(echo "$O" | awk -F[,\ ] '/^\*CNTI/ {print $3}' | sed 's|/|,|g')
|
|
||||||
if [ "x$TECH" != "x" ]; then
|
|
||||||
MODE="$TECH"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Novatel
|
|
||||||
if [ "x$MODE" = "x-" ]; then
|
|
||||||
TECH=$(echo "$O" | awk -F[,\ ] '/^\$CNTI/ {print $4}' | sed 's|/|,|g')
|
|
||||||
if [ "x$TECH" != "x" ]; then
|
|
||||||
MODE="$TECH"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Vodafone - icera
|
|
||||||
if [ "x$MODE" = "x-" ]; then
|
|
||||||
TECH=$(echo "$O" | awk -F[,\ ] '/^\%NWSTATE/ {print $4}' | sed 's|/|,|g')
|
|
||||||
if [ "x$TECH" != "x" ]; then
|
|
||||||
MODE="$TECH"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# SIMCOM
|
|
||||||
if [ "x$MODE" = "x-" ]; then
|
|
||||||
TECH=$(echo "$O" | awk -F[,\ ] '/^\+CNSMOD/ {print $3}')
|
|
||||||
case "$TECH" in
|
|
||||||
1*) MODE="GSM";;
|
|
||||||
2*) MODE="GPRS";;
|
|
||||||
3*) MODE="EDGE";;
|
|
||||||
4*) MODE="UMTS";;
|
|
||||||
5*) MODE="HSDPA";;
|
|
||||||
6*) MODE="HSUPA";;
|
|
||||||
7*) MODE="HSPA";;
|
|
||||||
*) MODE="-";;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# generic 3GPP TS 27.007 V10.4.0
|
|
||||||
if [ "x$MODE" = "x-" ]; then
|
|
||||||
TECH=$(echo "$O" | awk -F[,] '/^\+COPS/ {print $4}')
|
|
||||||
case "$TECH" in
|
|
||||||
2*) MODE="UMTS";;
|
|
||||||
3*) MODE="EDGE";;
|
|
||||||
4*) MODE="HSDPA";;
|
|
||||||
5*) MODE="HSUPA";;
|
|
||||||
6*) MODE="HSPA";;
|
|
||||||
7*) MODE="LTE";;
|
|
||||||
*) MODE="-";;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# CREG
|
|
||||||
CREG="+CGREG"
|
|
||||||
LAC=$(echo "$O" | awk -F[,] '/\'$CREG'/ {printf "%s", toupper($3)}' | sed 's/[^A-F0-9]//g')
|
|
||||||
if [ "x$LAC" = "x" ]; then
|
|
||||||
CREG="+CREG"
|
|
||||||
LAC=$(echo "$O" | awk -F[,] '/\'$CREG'/ {printf "%s", toupper($3)}' | sed 's/[^A-F0-9]//g')
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "x$LAC" != "x" ]; then
|
|
||||||
LAC_NUM=$(printf %d 0x$LAC)
|
|
||||||
else
|
|
||||||
LAC="-"
|
|
||||||
LAC_NUM="-"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# TAC
|
|
||||||
TAC=$(echo "$O" | awk -F[,] '/^\+CEREG/ {printf "%s", toupper($3)}' | sed 's/[^A-F0-9]//g')
|
|
||||||
if [ "x$TAC" != "x" ]; then
|
|
||||||
TAC_NUM=$(printf %d 0x$TAC)
|
|
||||||
else
|
|
||||||
TAC="-"
|
|
||||||
TAC_NUM="-"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# ECIO / RSCP
|
|
||||||
ECIO="-"
|
|
||||||
RSCP="-"
|
|
||||||
|
|
||||||
ECIx=$(echo "$O" | awk -F[,\ ] '/^\+ZRSSI:/ {print $3}')
|
|
||||||
if [ "x$ECIx" != "x" ]; then
|
|
||||||
ECIO=`expr $ECIx / 2`
|
|
||||||
ECIO="-"$ECIO
|
|
||||||
fi
|
|
||||||
|
|
||||||
RSCx=$(echo "$O" | awk -F[,\ ] '/^\+ZRSSI:/ {print $4}')
|
|
||||||
if [ "x$RSCx" != "x" ]; then
|
|
||||||
RSCP=`expr $RSCx / 2`
|
|
||||||
RSCP="-"$RSCP
|
|
||||||
fi
|
|
||||||
|
|
||||||
RSCx=$(echo "$O" | awk -F[,\ ] '/^\^CSNR:/ {print $2}')
|
|
||||||
if [ "x$RSCx" != "x" ]; then
|
|
||||||
RSCP=$RSCx
|
|
||||||
fi
|
|
||||||
|
|
||||||
ECIx=$(echo "$O" | awk -F[,\ ] '/^\^CSNR:/ {print $3}')
|
|
||||||
if [ "x$ECIx" != "x" ]; then
|
|
||||||
ECIO=$ECIx
|
|
||||||
fi
|
|
||||||
|
|
||||||
# RSRP / RSRQ
|
|
||||||
RSRP="-"
|
|
||||||
RSRQ="-"
|
|
||||||
SINR="-"
|
|
||||||
RSRx=$(echo "$O" | awk -F[,:] '/^\^LTERSRP:/ {print $2}')
|
|
||||||
if [ "x$RSRx" != "x" ]; then
|
|
||||||
RSRP=$RSRx
|
|
||||||
RSRQ=$(echo "$O" | awk -F[,:] '/^\^LTERSRP:/ {print $3}')
|
|
||||||
fi
|
|
||||||
|
|
||||||
TECH=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $2}' | sed 's/[" ]//g')
|
|
||||||
if [ "x$TECH" != "x" ]; then
|
|
||||||
PARAM2=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $4}')
|
|
||||||
PARAM3=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $5}')
|
|
||||||
PARAM4=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $6}')
|
|
||||||
|
|
||||||
case "$TECH" in
|
|
||||||
WCDMA*)
|
|
||||||
RSCP=$(awk 'BEGIN {print -121 + '$PARAM2'}')
|
|
||||||
ECIO=$(awk 'BEGIN {print -32.5 + '$PARAM3'/2}')
|
|
||||||
;;
|
|
||||||
LTE*)
|
|
||||||
RSRP=$(awk 'BEGIN {print -141 + '$PARAM2'}')
|
|
||||||
SINR=$(awk 'BEGIN {print -20.2 + '$PARAM3'/5}')
|
|
||||||
RSRQ=$(awk 'BEGIN {print -20 + '$PARAM4'/2}')
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$SEC" ]; then
|
|
||||||
if [ "x$(uci -q get network.$SEC.proto)" = "xqmi" ]; then
|
|
||||||
. /usr/share/libubox/jshn.sh
|
|
||||||
json_init
|
|
||||||
json_load "$(uqmi -d "$(uci -q get network.$SEC.device)" --get-signal-info)" >/dev/null 2>&1
|
|
||||||
json_get_var T type
|
|
||||||
if [ "x$T" = "xlte" ]; then
|
|
||||||
json_get_var RSRP rsrp
|
|
||||||
json_get_var RSRQ rsrq
|
|
||||||
fi
|
|
||||||
if [ "x$T" = "xwcdma" ]; then
|
|
||||||
json_get_var ECIO ecio
|
|
||||||
json_get_var RSSI rssi
|
|
||||||
json_get_var RSCP rscp
|
|
||||||
if [ -z "$RSCP" ]; then
|
|
||||||
RSCP=$((RSSI+ECIO))
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
BTSINFO=""
|
|
||||||
CID=$(echo "$O" | awk -F[,] '/\'$CREG'/ {printf "%s", toupper($4)}' | sed 's/[^A-F0-9]//g')
|
|
||||||
if [ "x$CID" != "x" ]; then
|
|
||||||
CID_NUM=$(printf %d 0x$CID)
|
|
||||||
|
|
||||||
if [ ${#CID} -gt 4 ]; then
|
|
||||||
T=$(echo "$CID" | awk '{print substr($1,length(substr($1,1,length($1)-4))+1)}')
|
|
||||||
else
|
|
||||||
T=$CID
|
|
||||||
fi
|
|
||||||
|
|
||||||
CLF=$(uci -q get 3ginfo.@3ginfo[0].clf)
|
|
||||||
if [ -e "$CLF" ]; then
|
|
||||||
PAT="xxx"
|
|
||||||
[ "x$T" != "x-" -a "x$LAC_NUM" != "x-" ] && PAT="^$COPS_NUM;0x"$(printf %04X 0x$T)";0x"$(printf %04X $LAC_NUM)";"
|
|
||||||
is_gz=$(dd if="$CLF" bs=1 count=2 2>/dev/null | hexdump -v -e '1/1 "%02x"')
|
|
||||||
if [ "x$is_gz" = "x1f8b" ] ; then
|
|
||||||
BTSINFO="<a href=\"https://maps.google.pl/?t=k\&z=17\&q="$(zcat "$CLF" | awk -F";" '/'$PAT'/ {printf $5","$6}')"\">"$(zcat "$CLF" | awk -F";" '/'$PAT'/ {gsub(/\!/,"\\!");print $8}')"</a>"
|
|
||||||
else
|
|
||||||
BTSINFO="<a href=\"https://maps.google.pl/?t=k\&z=17\&q="$(awk -F";" '/'$PAT'/ {printf $5","$6}' "$CLF")"\">"$(awk -F";" '/'$PAT'/ {gsub(/\!/,"\\!");print $8}' "$CLF")"</a>"
|
|
||||||
fi
|
|
||||||
if [ $FORMAT -eq 2 ]; then
|
|
||||||
BTSINFO=$(echo "$BTSINFO" | sed 's!<a.*>\(.*\)</a>!\1!g')
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $FORMAT -eq 0 ]; then
|
|
||||||
case $COPS_NUM in
|
|
||||||
260*) CID="<a href=\"https://btsearch.pl/stations?q="$CID_NUM"\">$CID</a>";;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
CID="-"
|
|
||||||
CID_NUM="-"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# CGEQNEG
|
|
||||||
QOS_SHOW="none"
|
|
||||||
DOWN="-"
|
|
||||||
UP="-"
|
|
||||||
|
|
||||||
DOWx=$(echo "$O" | awk -F[,] '/\+CGEQNEG/ {printf "%s", $4}')
|
|
||||||
if [ "x$DOWx" != "x" ]; then
|
|
||||||
DOWN=$DOWx
|
|
||||||
UP=$(echo "$O" | awk -F[,] '/\+CGEQNEG/ {printf "%s", $3}')
|
|
||||||
QOS_SHOW="block"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# SMS
|
|
||||||
if [ -e /usr/bin/gnokii ]; then
|
|
||||||
SMS_SHOW="block"
|
|
||||||
else
|
|
||||||
SMS_SHOW="none"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# USSD
|
|
||||||
which ussd159 >/dev/null 2>&1
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
USSD_SHOW="block"
|
|
||||||
else
|
|
||||||
USSD_SHOW="none"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Stan limitu
|
|
||||||
LIMIT_SHOW="none"
|
|
||||||
LIMIT=$(uci -q get 3ginfo.@3ginfo[0].script)
|
|
||||||
if [ "x$LIMIT" != "x" ]; then
|
|
||||||
LIMIT_SHOW="block"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Status polaczenia
|
|
||||||
|
|
||||||
CONN_TIME="-"
|
|
||||||
RX="-"
|
|
||||||
TX="-"
|
|
||||||
|
|
||||||
if [ -z "$SEC" ]; then
|
|
||||||
STATUS=$NOINFO
|
|
||||||
[ $FORMAT -eq 2 ] && STATUS="NOINFO"
|
|
||||||
|
|
||||||
STATUS_TRE="-"
|
|
||||||
STATUS_SHOW="none"
|
|
||||||
STATUS_SHOW_BUTTON="none"
|
|
||||||
else
|
|
||||||
NETUP=$(ifstatus $SEC | grep "\"up\": true")
|
|
||||||
if [ -n "$NETUP" ]; then
|
|
||||||
[ $FORMAT -eq 0 ] && STATUS="<font color=green>$CONNECTED</font>"
|
|
||||||
[ $FORMAT -eq 1 ] && STATUS=$CONNECTED
|
|
||||||
[ $FORMAT -eq 2 ] && STATUS="CONNECTED"
|
|
||||||
STATUS_TRE=$DISCONNECT
|
|
||||||
|
|
||||||
CT=$(uci -q -P /var/state/ get network.$SEC.connect_time)
|
|
||||||
if [ -z $CT ]; then
|
|
||||||
CT=$(ifstatus $SEC | awk -F[:,] '/uptime/ {print $2}' | xargs)
|
|
||||||
else
|
|
||||||
UPTIME=$(cut -d. -f1 /proc/uptime)
|
|
||||||
CT=$((UPTIME-CT))
|
|
||||||
fi
|
|
||||||
if [ ! -z $CT ]; then
|
|
||||||
D=$(expr $CT / 60 / 60 / 24)
|
|
||||||
H=$(expr $CT / 60 / 60 % 24)
|
|
||||||
M=$(expr $CT / 60 % 60)
|
|
||||||
S=$(expr $CT % 60)
|
|
||||||
CONN_TIME=$(printf "%dd, %02d:%02d:%02d" $D $H $M $S)
|
|
||||||
fi
|
|
||||||
IFACE=$(ifstatus $SEC | awk -F\" '/l3_device/ {print $4}')
|
|
||||||
if [ -n "$IFACE" ]; then
|
|
||||||
RX=$(ifconfig $IFACE | awk -F[\(\)] '/bytes/ {printf "%s",$2}')
|
|
||||||
TX=$(ifconfig $IFACE | awk -F[\(\)] '/bytes/ {printf "%s",$4}')
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
|
|
||||||
[ $FORMAT -eq 0 ] && STATUS="<font color=red>$DISCONNECTED</font>"
|
|
||||||
[ $FORMAT -eq 1 ] && STATUS=$DISCONNECTED
|
|
||||||
[ $FORMAT -eq 2 ] && STATUS="DISCONNECTED"
|
|
||||||
STATUS_TRE=$CONNECT
|
|
||||||
fi
|
|
||||||
STATUS_SHOW="block"
|
|
||||||
STATUS_SHOW_BUTTON="block"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "x"$(uci -q get 3ginfo.@3ginfo[0].connect_button) = "x0" ]; then
|
|
||||||
STATUS_SHOW_BUTTON="none"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Informacja o urzadzeniu
|
|
||||||
DEVICE=$(echo "$O" | awk -F[:] '/DEVICE/ { print $2}')
|
|
||||||
if [ "x$DEVICE" = "x" ]; then
|
|
||||||
DEVICE="-"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# podmiana w szablonie
|
|
||||||
if [ $FORMAT -eq 2 ]; then
|
|
||||||
TEMPLATE="$RES/status.json"
|
|
||||||
else
|
|
||||||
[ $FORMAT -eq 0 ] && EXT="html"
|
|
||||||
[ $FORMAT -eq 1 ] && EXT="txt"
|
|
||||||
TEMPLATE="$RES/status.$EXT.$LANG"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -e $TEMPLATE ]; then
|
|
||||||
sed -e "s!{CSQ}!$CSQ!g; \
|
|
||||||
s!{CSQ_PER}!$CSQ_PER!g; \
|
|
||||||
s!{CSQ_RSSI}!$CSQ_RSSI!g; \
|
|
||||||
s!{CSQ_COL}!$CSQ_COL!g; \
|
|
||||||
s!{COPS}!$COPS!g; \
|
|
||||||
s!{COPS_NUM}!$COPS_NUM!g; \
|
|
||||||
s!{COPS_MCC}!$COPS_MCC!g; \
|
|
||||||
s!{COPS_MNC}!$COPS_MNC!g; \
|
|
||||||
s!{LAC}!$LAC!g; \
|
|
||||||
s!{LAC_NUM}!$LAC_NUM!g; \
|
|
||||||
s!{CID}!$CID!g; \
|
|
||||||
s!{CID_NUM}!$CID_NUM!g; \
|
|
||||||
s!{TAC}!$TAC!g; \
|
|
||||||
s!{TAC_NUM}!$TAC_NUM!g; \
|
|
||||||
s!{BTSINFO}!$BTSINFO!g; \
|
|
||||||
s!{DOWN}!$DOWN!g; \
|
|
||||||
s!{UP}!$UP!g; \
|
|
||||||
s!{QOS_SHOW}!$QOS_SHOW!g; \
|
|
||||||
s!{SMS_SHOW}!$SMS_SHOW!g; \
|
|
||||||
s!{USSD_SHOW}!$USSD_SHOW!g; \
|
|
||||||
s!{LIMIT_SHOW}!$LIMIT_SHOW!g; \
|
|
||||||
s!{STATUS}!$STATUS!g; \
|
|
||||||
s!{CONN_TIME}!$CONN_TIME!g; \
|
|
||||||
s!{CONN_TIME_SEC}!$CT!g; \
|
|
||||||
s!{RX}!$RX!g; \
|
|
||||||
s!{TX}!$TX!g; \
|
|
||||||
s!{STATUS_TRE}!$STATUS_TRE!g; \
|
|
||||||
s!{STATUS_SHOW}!$STATUS_SHOW!g; \
|
|
||||||
s!{STATUS_SHOW_BUTTON}!$STATUS_SHOW_BUTTON!g; \
|
|
||||||
s!{DEVICE}!$DEVICE!g; \
|
|
||||||
s!{ECIO}!$ECIO!g; \
|
|
||||||
s!{RSCP}!$RSCP!g; \
|
|
||||||
s!{RSRP}!$RSRP!g; \
|
|
||||||
s!{RSRQ}!$RSRQ!g; \
|
|
||||||
s!{SINR}!$SINR!g; \
|
|
||||||
s!{MODE}!$MODE!g" $TEMPLATE
|
|
||||||
else
|
|
||||||
echo "Template $TEMPLATE missing!"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
22234;BT Italia SpA
|
|
||||||
22202;Elsacom
|
|
||||||
22299;H3G
|
|
||||||
22233;H3G
|
|
||||||
22277;IPSE 2000
|
|
||||||
22235;Lycamobile Srl
|
|
||||||
22207;Noverca Italia Srl
|
|
||||||
22230;RFI Rete Ferroviaria Italiana SpA
|
|
||||||
22243;Telecom Italia Mobile SpA
|
|
||||||
22201;TIM
|
|
||||||
22248;Telecom Italia Mobile SpA
|
|
||||||
22210;Vodafone
|
|
||||||
22206;Vodafone
|
|
||||||
22244;WIND
|
|
||||||
22288;WIND
|
|
||||||
26001;Plus
|
|
||||||
26002;T-Mobile;T-Mobile.pl
|
|
||||||
26003;Orange;PTK Centertel;Orange PL
|
|
||||||
26006;Play;Play Fakt Mobile
|
|
||||||
26016;Mobyland LTE;Cyfrowy Polsat
|
|
||||||
26017;Aero2
|
|
||||||
26034;NetWorks
|
|
||||||
24801;Telia
|
|
||||||
24802;Elisa
|
|
||||||
24803;Tele2
|
|
||||||
51001;Indosat Ooredoo
|
|
||||||
51003;StarOne
|
|
||||||
51007;TelkomFlexi
|
|
||||||
51008;AXIS
|
|
||||||
51009;Smartfren
|
|
||||||
51010;Telkomsel
|
|
||||||
51011;XL 4G
|
|
||||||
51020;TELKOMMobile
|
|
||||||
51021;IM3
|
|
||||||
51027;Ceria
|
|
||||||
51028;Fren/Hepi
|
|
||||||
51088;BOLT! Super 4G
|
|
||||||
51089;3
|
|
||||||
51099;Esia
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
NOTDETECTED="Not detected any device"
|
|
||||||
NODEVICE="No device"
|
|
||||||
PINERROR="PIN code error"
|
|
||||||
CONNECTED="Connected"
|
|
||||||
CONNECT="Connect"
|
|
||||||
DISCONNECTED="Disconnected"
|
|
||||||
DISCONNECT="Disconnect"
|
|
||||||
NOINFO="No information"
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
NOTDETECTED="Ei tuvastatud ühtegi seadet"
|
|
||||||
NODEVICE="Seade puudub"
|
|
||||||
PINERROR="PIN-koodi viga"
|
|
||||||
CONNECTED="Ühendatud"
|
|
||||||
CONNECT="Ühenda"
|
|
||||||
DISCONNECTED="Lahti ühendatud"
|
|
||||||
DISCONNECT="Ühenda lahti"
|
|
||||||
NOINFO="Pole informatsiooni"
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
NOTDETECTED="Nessun dispositivo trovato"
|
|
||||||
NODEVICE="Nessun dispositivo"
|
|
||||||
PINERROR="Errore codice PIN"
|
|
||||||
CONNECTED="Connesso"
|
|
||||||
CONNECT="Connetti"
|
|
||||||
DISCONNECTED="Disconnesso"
|
|
||||||
DISCONNECT="Disconnetti"
|
|
||||||
NOINFO="Nessuna Informazione"
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
NOTDETECTED="Nie wykryto żadnego urządzenia!"
|
|
||||||
NODEVICE="Brak urządzenia"
|
|
||||||
PINERROR="Błąd kodu PIN"
|
|
||||||
CONNECTED="Połączony"
|
|
||||||
CONNECT="Połącz"
|
|
||||||
DISCONNECTED="Rozłączony"
|
|
||||||
DISCONNECT="Rozłącz"
|
|
||||||
NOINFO="Brak informacji"
|
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.02
|
|
||||||
waitquiet 0.2 0.2
|
|
||||||
|
|
||||||
send "AT\^CURC=0^m"
|
|
||||||
waitfor 5 "OK","ERROR"
|
|
||||||
|
|
||||||
let $c="AT+CSQ^m"
|
|
||||||
let $r="+CSQ"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="ATE1; +CGMI^m"
|
|
||||||
gosub readatcmdnr
|
|
||||||
let $v=$s
|
|
||||||
|
|
||||||
if $toupper($mid($v,0,3)) = "HUA" goto huawei
|
|
||||||
if $toupper($mid($v,0,3)) = "NOK" goto vodafone
|
|
||||||
if $toupper($mid($v,0,3)) = "NOV" goto novatel
|
|
||||||
if $toupper($mid($v,0,3)) = "OPT" goto option
|
|
||||||
if $toupper($mid($v,0,3)) = "QUA" goto qualcomm
|
|
||||||
if $toupper($mid($v,0,3)) = "SIM" goto simcom
|
|
||||||
if $toupper($mid($v,0,3)) = "SIE" goto sierra
|
|
||||||
if $toupper($mid($v,0,3)) = "VOD" goto vodafone
|
|
||||||
if $toupper($mid($v,0,3)) = "ZTE" goto zte
|
|
||||||
goto generic
|
|
||||||
|
|
||||||
:simcom
|
|
||||||
let $c="AT+CNSMOD?^m"
|
|
||||||
let $r="+CNSMOD"
|
|
||||||
gosub readatcmd
|
|
||||||
goto next
|
|
||||||
|
|
||||||
:vodafone
|
|
||||||
let $c="AT%NWSTATE=1^m"
|
|
||||||
let $r="%NWSTATE"
|
|
||||||
gosub readatcmd
|
|
||||||
goto next
|
|
||||||
|
|
||||||
:novatel
|
|
||||||
let $c="AT$CNTI=0^m"
|
|
||||||
let $r="$CNTI"
|
|
||||||
gosub readatcmd
|
|
||||||
goto next
|
|
||||||
|
|
||||||
:sierra
|
|
||||||
let $c="AT*CNTI=0^m"
|
|
||||||
let $r="*CNTI"
|
|
||||||
gosub readatcmd
|
|
||||||
goto next
|
|
||||||
|
|
||||||
:option
|
|
||||||
let $c="AT_OCTI?^m"
|
|
||||||
let $r="_OCTI"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT_OWCTI?^m"
|
|
||||||
let $r="_OWCTI"
|
|
||||||
gosub readatcmd
|
|
||||||
goto next
|
|
||||||
|
|
||||||
:qualcomm
|
|
||||||
let $c="AT+COPS?^m"
|
|
||||||
let $r="+COPS"
|
|
||||||
gosub readatcmd
|
|
||||||
goto next1
|
|
||||||
|
|
||||||
:zte
|
|
||||||
let $c="AT+COPS?^m"
|
|
||||||
let $r="+COPS"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+ZRSSI^m"
|
|
||||||
let $r="+ZRSSI"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+ZPAS?^m"
|
|
||||||
let $r="+ZPAS"
|
|
||||||
gosub readatcmd
|
|
||||||
goto next1
|
|
||||||
|
|
||||||
:huawei
|
|
||||||
let $c="AT\^SYSINFOEX^m"
|
|
||||||
let $r="\^SYSINFOEX"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT\^CSNR?^m"
|
|
||||||
let $r="\^CSNR"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT\^LTERSRP?^m"
|
|
||||||
let $r="\^LTERSRP"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT\^HCSQ?^m"
|
|
||||||
let $r="\^HCSQ"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
:generic
|
|
||||||
let $c="AT\^SYSINFO^m"
|
|
||||||
let $r="\^SYSINFO"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
:next
|
|
||||||
let $c="AT+COPS=3,2;+COPS?^m"
|
|
||||||
let $r="+COPS"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
:next1
|
|
||||||
let $c="AT+CREG=2;+CREG?^m"
|
|
||||||
let $r="+CREG"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+CGREG=2;+CGREG?^m"
|
|
||||||
let $r="+CGREG"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+CEREG=2;+CEREG?^m"
|
|
||||||
let $r="+CEREG"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="AT+CGEQNEG=1^m"
|
|
||||||
let $r="+CGEQNEG"
|
|
||||||
gosub readatcmd
|
|
||||||
|
|
||||||
let $c="ATE1; +CGMM^m"
|
|
||||||
gosub readatcmdnr
|
|
||||||
print "\nDEVICE:",$v," ",$s,"\n"
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:readatcmd
|
|
||||||
let i=15
|
|
||||||
send $c
|
|
||||||
:loop
|
|
||||||
get 0.1 "^m" $s
|
|
||||||
let l=len($r)
|
|
||||||
if len($s) < l goto loop1
|
|
||||||
if $mid($s,1,l) <> $r goto loop1
|
|
||||||
print $s
|
|
||||||
return
|
|
||||||
|
|
||||||
:loop1
|
|
||||||
if len($s) < 2 goto loop2
|
|
||||||
if $mid($s,1,2) = "ER" return
|
|
||||||
if $mid($s,1,2) = "CO" return
|
|
||||||
:loop2
|
|
||||||
if i = 0 return
|
|
||||||
let i=i-1
|
|
||||||
goto loop
|
|
||||||
|
|
||||||
:readatcmdnr
|
|
||||||
let i=15
|
|
||||||
send $c
|
|
||||||
:loop3
|
|
||||||
get 0.1 "^m" $s
|
|
||||||
if len($s) < 2 goto loop5
|
|
||||||
if $mid($s,1,2) = "ER" goto loop4
|
|
||||||
if $mid($s,1,2) = "OK" goto loop5
|
|
||||||
if $mid($s,1,2) = "AT" goto loop5
|
|
||||||
if $mid($s,1,2) = "TE" goto loop5
|
|
||||||
if $mid($s,1,1) = "+" goto loop5
|
|
||||||
if $mid($s,1,1) = "\^" goto loop5
|
|
||||||
let l=len($s)
|
|
||||||
let $s=$mid($s,1,l)
|
|
||||||
return
|
|
||||||
|
|
||||||
:loop4
|
|
||||||
let $s=""
|
|
||||||
return
|
|
||||||
|
|
||||||
:loop5
|
|
||||||
if i = 0 return
|
|
||||||
let i=i-1
|
|
||||||
goto loop3
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
IP=$1
|
|
||||||
[ -z "$IP" ] && exit 0
|
|
||||||
[ -e /usr/bin/wget ] || exit 0
|
|
||||||
|
|
||||||
getvaluen() {
|
|
||||||
echo $(sed 's!.*"'$2'":\([^,]*\).*!\1!g' /tmp/$1)
|
|
||||||
}
|
|
||||||
|
|
||||||
getvalue() {
|
|
||||||
echo $(sed 's!.*"'$2'":"\([^"]*\).*!\1!g' /tmp/$1)
|
|
||||||
}
|
|
||||||
|
|
||||||
rand=`awk 'BEGIN{srand();print int(rand()*(99000-1000))+1000 }'`
|
|
||||||
|
|
||||||
files="getWanInfo getImgInfo getSysteminfo"
|
|
||||||
for f in $files; do
|
|
||||||
wget -t 3 -O /tmp/$f "http://$IP/goform/$f?rand=$rand" >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
MODEN=$(getvaluen getWanInfo "network_type")
|
|
||||||
case $MODEN in
|
|
||||||
1) MODE="GPRS";;
|
|
||||||
2) MODE="EDGE";;
|
|
||||||
3) MODE="HSDPA";;
|
|
||||||
4) MODE="HSUPA";;
|
|
||||||
5) MODE="UMTS";;
|
|
||||||
9) MODE="GSM";;
|
|
||||||
11) MODE="LTE";;
|
|
||||||
12) MODE="HSPA+";;
|
|
||||||
13) MODE="DC HSPA+";;
|
|
||||||
*) MODE="-";;
|
|
||||||
esac
|
|
||||||
echo "^SYSINFOEX:x,x,x,x,,x,\"$MODE\",$MODEN,\"$MODE\""
|
|
||||||
|
|
||||||
OPER=$(getvalue getWanInfo "network_name")
|
|
||||||
echo "+COPS: 0,0,\"$OPER\",x"
|
|
||||||
|
|
||||||
SIGNAL=$(getvaluen getImgInfo "signal")
|
|
||||||
case $SIGNAL in
|
|
||||||
1) CSQ="6";;
|
|
||||||
2) CSQ="12";;
|
|
||||||
3) CSQ="18";;
|
|
||||||
4) CSQ="24";;
|
|
||||||
5) CSQ="31";;
|
|
||||||
*) CSQ="0";;
|
|
||||||
esac
|
|
||||||
echo "+CSQ: $CSQ,99"
|
|
||||||
|
|
||||||
MODEL=$(getvalue getSysteminfo "dev_name")
|
|
||||||
echo "DEVICE:Alcatel $MODEL"
|
|
||||||
|
|
||||||
if [ "x$2" != "xdebug" ]; then
|
|
||||||
for f in $files; do
|
|
||||||
rm /tmp/$f
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,172 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
IP=$1
|
|
||||||
[ -z "$IP" ] && exit 0
|
|
||||||
[ -e /usr/bin/wget ] || exit 0
|
|
||||||
|
|
||||||
getvaluen() {
|
|
||||||
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1 | sed 's/[^0-9]//g')
|
|
||||||
}
|
|
||||||
|
|
||||||
getvaluens() {
|
|
||||||
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1 | sed 's/[^0-9-]//g')
|
|
||||||
}
|
|
||||||
|
|
||||||
getvalue() {
|
|
||||||
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1)
|
|
||||||
}
|
|
||||||
|
|
||||||
cookie=$(mktemp)
|
|
||||||
/usr/bin/wget -t 25 -O /tmp/webserver-token "http://$IP/api/webserver/token" >/dev/null 2>&1
|
|
||||||
token=$(getvaluen webserver-token token)
|
|
||||||
if [ -z "$token" ]; then
|
|
||||||
/usr/bin/wget -t 25 -O /tmp/webserver-token "http://$IP/api/webserver/SesTokInfo" >/dev/null 2>&1
|
|
||||||
sesinfo=$(getvalue webserver-token SesInfo)
|
|
||||||
fi
|
|
||||||
if [ -z "$sesinfo" ]; then
|
|
||||||
/usr/bin/wget -q -O /dev/null --keep-session-cookies --save-cookies $cookie "http://$IP/html/home.html"
|
|
||||||
fi
|
|
||||||
|
|
||||||
/usr/bin/wget -t 25 -O /tmp/user-state-login "http://$IP/api/user/state-login"
|
|
||||||
T1=$(getvalue user-state-login State)
|
|
||||||
if [ "x$T1" != "x0" ]; then
|
|
||||||
USER="admin"
|
|
||||||
PASS="admin"
|
|
||||||
PASS=$(echo -n "$PASS" | base64)
|
|
||||||
DATA="<request><Username>$USER</Username><Password>$PASS</Password></request>"
|
|
||||||
/usr/bin/wget -t 25 -O /dev/null "http://$IP/api/user/login" --post-data $DATA --header "__RequestVerificationToken: $token"
|
|
||||||
fi
|
|
||||||
|
|
||||||
files="device/signal monitoring/status net/current-plmn net/signal-para device/information device/basic_information"
|
|
||||||
for f in $files; do
|
|
||||||
nf=$(echo $f | sed 's!/!-!g')
|
|
||||||
if [ -n "$token" ]; then
|
|
||||||
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --header "__RequestVerificationToken: $token" >/dev/null 2>&1
|
|
||||||
elif [ -n "$sesinfo" ]; then
|
|
||||||
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --header "Cookie: $sesinfo" >/dev/null 2>&1
|
|
||||||
else
|
|
||||||
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --load-cookies=$cookie >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
rssi=$(getvaluen device-signal rssi)
|
|
||||||
if [ -n "$rssi" ]; then
|
|
||||||
CSQ=$(((-1*rssi + 113)/2))
|
|
||||||
echo "+CSQ: $CSQ,99"
|
|
||||||
else
|
|
||||||
per=$(getvaluen monitoring-status SignalStrength)
|
|
||||||
if [ -n "$per" ]; then
|
|
||||||
CSQ=$((($per*31)/100))
|
|
||||||
echo "+CSQ: $CSQ,99"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
MODEN=$(getvaluen monitoring-status CurrentNetworkType)
|
|
||||||
case $MODEN in
|
|
||||||
1) MODE="GSM";;
|
|
||||||
2) MODE="GPRS";;
|
|
||||||
3) MODE="EDGE";;
|
|
||||||
4) MODE="WCDMA";;
|
|
||||||
5) MODE="HSDPA";;
|
|
||||||
6) MODE="HSUPA";;
|
|
||||||
7) MODE="HSPA";;
|
|
||||||
8) MODE="TDSCDMA";;
|
|
||||||
9) MODE="HSPA+";;
|
|
||||||
10) MODE="EVDO rev. 0";;
|
|
||||||
11) MODE="EVDO rev. A";;
|
|
||||||
12) MODE="EVDO rev. B";;
|
|
||||||
13) MODE="1xRTT";;
|
|
||||||
14) MODE="UMB";;
|
|
||||||
15) MODE="1xEVDV";;
|
|
||||||
16) MODE="3xRTT";;
|
|
||||||
17) MODE="HSPA+64QAM";;
|
|
||||||
18) MODE="HSPA+MIMO";;
|
|
||||||
19) MODE="LTE";;
|
|
||||||
21) MODE="IS95A";;
|
|
||||||
22) MODE="IS95B";;
|
|
||||||
23) MODE="CDMA1x";;
|
|
||||||
24) MODE="EVDO rev. 0";;
|
|
||||||
25) MODE="EVDO rev. A";;
|
|
||||||
26) MODE="EVDO rev. B";;
|
|
||||||
27) MODE="Hybrydowa CDMA1x";;
|
|
||||||
28) MODE="Hybrydowa EVDO rev. 0";;
|
|
||||||
29) MODE="Hybrydowa EVDO rev. A";;
|
|
||||||
30) MODE="Hybrydowa EVDO rev. B";;
|
|
||||||
31) MODE="EHRPD rev. 0";;
|
|
||||||
32) MODE="EHRPD rev. A";;
|
|
||||||
33) MODE="EHRPD rev. B";;
|
|
||||||
34) MODE="Hybrydowa EHRPD rev. 0";;
|
|
||||||
35) MODE="Hybrydowa EHRPD rev. A";;
|
|
||||||
36) MODE="Hybrydowa EHRPD rev. B";;
|
|
||||||
41) MODE="WCDMA (UMTS)";;
|
|
||||||
42) MODE="HSDPA";;
|
|
||||||
43) MODE="HSUPA";;
|
|
||||||
44) MODE="HSPA";;
|
|
||||||
45) MODE="HSPA+";;
|
|
||||||
46) MODE="DC-HSPA+";;
|
|
||||||
61) MODE="TD SCDMA";;
|
|
||||||
62) MODE="TD HSDPA";;
|
|
||||||
63) MODE="TD HSUPA";;
|
|
||||||
64) MODE="TD HSPA";;
|
|
||||||
65) MODE="TD HSPA+";;
|
|
||||||
81) MODE="802.16E";;
|
|
||||||
101) MODE="LTE";;
|
|
||||||
*) MODE="-";;
|
|
||||||
esac
|
|
||||||
echo "^SYSINFOEX:x,x,x,x,,x,\"$MODE\",$MODEN,\"$MODE\""
|
|
||||||
|
|
||||||
numeric=$(getvaluen net-current-plmn Numeric)
|
|
||||||
echo "+COPS: 0,2,\"$numeric\",x"
|
|
||||||
|
|
||||||
lac=$(getvalue net-signal-para Lac)
|
|
||||||
if [ -z "$lac" ]; then
|
|
||||||
/usr/bin/wget -t 3 -O /tmp/add-param "http://$IP/config/deviceinformation/add_param.xml" > /dev/null 2>&1
|
|
||||||
lac=$(getvalue add-param lac)
|
|
||||||
rm /tmp/add-param
|
|
||||||
fi
|
|
||||||
cid=$(getvalue net-signal-para CellID)
|
|
||||||
if [ -z "$cid" ]; then
|
|
||||||
cell_id=$(getvalue device-signal cell_id)
|
|
||||||
cid=""
|
|
||||||
[ -n "$cell_id" ] && cid=$(printf %0X $cell_id)
|
|
||||||
fi
|
|
||||||
echo "+CREG: 2,1,\"$lac\",\"$cid\""
|
|
||||||
|
|
||||||
if [ "x$MODE" = "xLTE" ]; then
|
|
||||||
rsrp=$(getvaluens device-signal rsrp)
|
|
||||||
sinr=$(getvaluens device-signal sinr)
|
|
||||||
rsrq=$(getvaluens device-signal rsrq)
|
|
||||||
rsrp=$(awk 'BEGIN {print '$rsrp' + 141}')
|
|
||||||
sinr=$(awk 'BEGIN {print ('$sinr'+20.2)*5}')
|
|
||||||
rsrq=$(awk 'BEGIN {print ('$rsrq'+20)*2}')
|
|
||||||
echo "^HCSQ: \"$MODE\",$rssi,$rsrp,$sinr,$rsrq"
|
|
||||||
else
|
|
||||||
rscp=$(getvaluens device-signal rscp)
|
|
||||||
[ -z "$rscp" ] && rscp=$(getvaluens net-signal-para Rscp)
|
|
||||||
ecio=$(getvaluens net-signal-para ecio)
|
|
||||||
[ -z "$ecio" ] && ecio=$(getvaluens net-signal-para Ecio)
|
|
||||||
echo "^CSNR: $rscp,$ecio"
|
|
||||||
fi
|
|
||||||
|
|
||||||
device=$(getvalue device-information DeviceName)
|
|
||||||
if [ -n "$device" ]; then
|
|
||||||
class=$(getvalue device-information Classify)
|
|
||||||
echo "DEVICE:Huawei $device $class"
|
|
||||||
else
|
|
||||||
device=$(getvalue device-basic_information devicename)
|
|
||||||
class=$(getvalue device-basic_information classify)
|
|
||||||
[ -n "$device" ] && echo "DEVICE:Huawei $device $class"
|
|
||||||
fi
|
|
||||||
|
|
||||||
DATA="<request><Logout>1</Logout></request>"
|
|
||||||
/usr/bin/wget -t 25 -O /tmp/ccc "http://$IP/api/user/logout" --post-data $DATA --header "__RequestVerificationToken: $token"
|
|
||||||
|
|
||||||
if [ "x$2" != "xdebug" ]; then
|
|
||||||
for f in $files webserver/token; do
|
|
||||||
nf=$(echo $f | sed 's!/!-!g')
|
|
||||||
rm /tmp/$nf
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
rm $cookie
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
IP=$1
|
|
||||||
[ -z "$IP" ] && exit 0
|
|
||||||
[ -e /usr/bin/wget ] || exit 0
|
|
||||||
|
|
||||||
getvaluen() {
|
|
||||||
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1 | sed 's/[^0-9]//g')
|
|
||||||
}
|
|
||||||
|
|
||||||
getvaluens() {
|
|
||||||
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1 | sed 's/[^0-9-]//g')
|
|
||||||
}
|
|
||||||
|
|
||||||
getvalue() {
|
|
||||||
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1)
|
|
||||||
}
|
|
||||||
|
|
||||||
cookie=$(mktemp)
|
|
||||||
/usr/bin/wget -t 25 -O /tmp/webserver-token "http://$IP/api/webserver/token" >/dev/null 2>&1
|
|
||||||
token=$(getvaluen webserver-token token)
|
|
||||||
if [ -z "$token" ]; then
|
|
||||||
/usr/bin/wget -t 25 -O /tmp/webserver-token "http://$IP/api/webserver/SesTokInfo" >/dev/null 2>&1
|
|
||||||
sesinfo=$(getvalue webserver-token SesInfo)
|
|
||||||
fi
|
|
||||||
if [ -z "$sesinfo" ]; then
|
|
||||||
/usr/bin/wget -q -O /dev/null --keep-session-cookies --save-cookies $cookie "http://$IP/html/home.html"
|
|
||||||
fi
|
|
||||||
|
|
||||||
files="device/signal monitoring/status net/current-plmn net/signal-para device/information device/basic_information"
|
|
||||||
for f in $files; do
|
|
||||||
nf=$(echo $f | sed 's!/!-!g')
|
|
||||||
if [ -n "$token" ]; then
|
|
||||||
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --header "__RequestVerificationToken: $token" >/dev/null 2>&1
|
|
||||||
elif [ -n "$sesinfo" ]; then
|
|
||||||
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --header "Cookie: $sesinfo" >/dev/null 2>&1
|
|
||||||
else
|
|
||||||
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --load-cookies=$cookie >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
rssi=$(getvaluen device-signal rssi)
|
|
||||||
if [ -n "$rssi" ]; then
|
|
||||||
CSQ=$(((-1*rssi + 113)/2))
|
|
||||||
echo "+CSQ: $CSQ,99"
|
|
||||||
else
|
|
||||||
per=$(getvaluen monitoring-status SignalStrength)
|
|
||||||
if [ -n "$per" ]; then
|
|
||||||
CSQ=$((($per*31)/100))
|
|
||||||
echo "+CSQ: $CSQ,99"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
MODEN=$(getvaluen monitoring-status CurrentNetworkType)
|
|
||||||
case $MODEN in
|
|
||||||
1) MODE="GSM";;
|
|
||||||
2) MODE="GPRS";;
|
|
||||||
3) MODE="EDGE";;
|
|
||||||
4) MODE="WCDMA";;
|
|
||||||
5) MODE="HSDPA";;
|
|
||||||
6) MODE="HSUPA";;
|
|
||||||
7) MODE="HSPA";;
|
|
||||||
8) MODE="TDSCDMA";;
|
|
||||||
9) MODE="HSPA+";;
|
|
||||||
10) MODE="EVDO rev. 0";;
|
|
||||||
11) MODE="EVDO rev. A";;
|
|
||||||
12) MODE="EVDO rev. B";;
|
|
||||||
13) MODE="1xRTT";;
|
|
||||||
14) MODE="UMB";;
|
|
||||||
15) MODE="1xEVDV";;
|
|
||||||
16) MODE="3xRTT";;
|
|
||||||
17) MODE="HSPA+64QAM";;
|
|
||||||
18) MODE="HSPA+MIMO";;
|
|
||||||
19) MODE="LTE";;
|
|
||||||
21) MODE="IS95A";;
|
|
||||||
22) MODE="IS95B";;
|
|
||||||
23) MODE="CDMA1x";;
|
|
||||||
24) MODE="EVDO rev. 0";;
|
|
||||||
25) MODE="EVDO rev. A";;
|
|
||||||
26) MODE="EVDO rev. B";;
|
|
||||||
27) MODE="Hybrydowa CDMA1x";;
|
|
||||||
28) MODE="Hybrydowa EVDO rev. 0";;
|
|
||||||
29) MODE="Hybrydowa EVDO rev. A";;
|
|
||||||
30) MODE="Hybrydowa EVDO rev. B";;
|
|
||||||
31) MODE="EHRPD rev. 0";;
|
|
||||||
32) MODE="EHRPD rev. A";;
|
|
||||||
33) MODE="EHRPD rev. B";;
|
|
||||||
34) MODE="Hybrydowa EHRPD rev. 0";;
|
|
||||||
35) MODE="Hybrydowa EHRPD rev. A";;
|
|
||||||
36) MODE="Hybrydowa EHRPD rev. B";;
|
|
||||||
41) MODE="WCDMA (UMTS)";;
|
|
||||||
42) MODE="HSDPA";;
|
|
||||||
43) MODE="HSUPA";;
|
|
||||||
44) MODE="HSPA";;
|
|
||||||
45) MODE="HSPA+";;
|
|
||||||
46) MODE="DC-HSPA+";;
|
|
||||||
61) MODE="TD SCDMA";;
|
|
||||||
62) MODE="TD HSDPA";;
|
|
||||||
63) MODE="TD HSUPA";;
|
|
||||||
64) MODE="TD HSPA";;
|
|
||||||
65) MODE="TD HSPA+";;
|
|
||||||
81) MODE="802.16E";;
|
|
||||||
101) MODE="LTE";;
|
|
||||||
*) MODE="-";;
|
|
||||||
esac
|
|
||||||
echo "^SYSINFOEX:x,x,x,x,,x,\"$MODE\",$MODEN,\"$MODE\""
|
|
||||||
|
|
||||||
numeric=$(getvaluen net-current-plmn Numeric)
|
|
||||||
echo "+COPS: 0,2,\"$numeric\",x"
|
|
||||||
|
|
||||||
lac=$(getvalue net-signal-para Lac)
|
|
||||||
if [ -z "$lac" ]; then
|
|
||||||
/usr/bin/wget -t 3 -O /tmp/add-param "http://$IP/config/deviceinformation/add_param.xml" > /dev/null 2>&1
|
|
||||||
lac=$(getvalue add-param lac)
|
|
||||||
rm /tmp/add-param
|
|
||||||
fi
|
|
||||||
cid=$(getvalue net-signal-para CellID)
|
|
||||||
if [ -z "$cid" ]; then
|
|
||||||
cell_id=$(getvalue device-signal cell_id)
|
|
||||||
cid=""
|
|
||||||
[ -n "$cell_id" ] && cid=$(printf %0X $cell_id)
|
|
||||||
fi
|
|
||||||
echo "+CREG: 2,1,\"$lac\",\"$cid\""
|
|
||||||
|
|
||||||
if [ "x$MODE" = "xLTE" ]; then
|
|
||||||
rsrp=$(getvaluens device-signal rsrp)
|
|
||||||
sinr=$(getvaluens device-signal sinr)
|
|
||||||
rsrq=$(getvaluens device-signal rsrq)
|
|
||||||
rsrp=$(awk 'BEGIN {print '$rsrp' + 141}')
|
|
||||||
sinr=$(awk 'BEGIN {print ('$sinr'+20.2)*5}')
|
|
||||||
rsrq=$(awk 'BEGIN {print ('$rsrq'+20)*2}')
|
|
||||||
echo "^HCSQ: \"$MODE\",$rssi,$rsrp,$sinr,$rsrq"
|
|
||||||
else
|
|
||||||
rscp=$(getvaluens device-signal rscp)
|
|
||||||
[ -z "$rscp" ] && rscp=$(getvaluens net-signal-para Rscp)
|
|
||||||
ecio=$(getvaluens net-signal-para ecio)
|
|
||||||
[ -z "$ecio" ] && ecio=$(getvaluens net-signal-para Ecio)
|
|
||||||
echo "^CSNR: $rscp,$ecio"
|
|
||||||
fi
|
|
||||||
|
|
||||||
device=$(getvalue device-information DeviceName)
|
|
||||||
if [ -n "$device" ]; then
|
|
||||||
class=$(getvalue device-information Classify)
|
|
||||||
echo "DEVICE:Huawei $device $class"
|
|
||||||
else
|
|
||||||
device=$(getvalue device-basic_information devicename)
|
|
||||||
class=$(getvalue device-basic_information classify)
|
|
||||||
[ -n "$device" ] && echo "DEVICE:Huawei $device $class"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "x$2" != "xdebug" ]; then
|
|
||||||
for f in $files webserver/token; do
|
|
||||||
nf=$(echo $f | sed 's!/!-!g')
|
|
||||||
rm /tmp/$nf
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
rm $cookie
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
let $d = $env("DEVICE")
|
|
||||||
if $d = "" goto timeout
|
|
||||||
|
|
||||||
open com $d
|
|
||||||
set com 115200n81
|
|
||||||
set senddelay 0.05
|
|
||||||
waitquiet 2 0.5
|
|
||||||
send "AT^m"
|
|
||||||
waitfor 2 "OK" "+CME ERROR"
|
|
||||||
if % = -1 goto timeout
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:timeout
|
|
||||||
exit 1
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
IP=$1
|
|
||||||
[ -z "$IP" ] && exit 0
|
|
||||||
|
|
||||||
T=$(mktemp)
|
|
||||||
wget -q -O $T "http://$IP/goform/goform_get_cmd_process?multi_data=1&cmd=manufacturer_name,model_name,network_provider,network_type,lte_rsrp,lte_rsrq,lte_rssi,lte_snr,cell_id,lac_code,hmcc,hmnc,rmcc,rmnc,rssi,rscp,ecio"
|
|
||||||
|
|
||||||
. /usr/share/libubox/jshn.sh
|
|
||||||
json_load "$(cat $T)"
|
|
||||||
|
|
||||||
json_get_vars manufacturer_name model_name network_provider network_type lte_rsrp lte_rsrq lte_rssi lte_snr cell_id lac_code hmcc hmnc rmcc rmnc rssi rscp ecio
|
|
||||||
|
|
||||||
if [ -n "$lte_rssi" ]; then
|
|
||||||
rssi=$lte_rssi
|
|
||||||
fi
|
|
||||||
if [ -n "$rssi" ]; then
|
|
||||||
CSQ=$(((rssi+113)/2))
|
|
||||||
else
|
|
||||||
CSQ=0
|
|
||||||
fi
|
|
||||||
echo "+CSQ: $CSQ,99"
|
|
||||||
|
|
||||||
echo "DEVICE:$manufacturer_name $model_name"
|
|
||||||
|
|
||||||
echo "^SYSINFOEX:x,x,x,x,,x,\"$network_type\",x,\"$network_type\""
|
|
||||||
|
|
||||||
if [ -n "$hmcc" ]; then
|
|
||||||
mcc=$(printf "%03d" $hmcc)
|
|
||||||
else
|
|
||||||
[ -n "$rmcc" ] && mcc=$(printf "%03d" $rmcc)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$hmnc" ]; then
|
|
||||||
mnc=$(printf "%02d" $hmnc)
|
|
||||||
else
|
|
||||||
[ -n "$rmnc" ] && mnc=$(printf "%02d" $rmnc)
|
|
||||||
fi
|
|
||||||
echo "+COPS: 0,2,\"$mcc$mnc\",x"
|
|
||||||
|
|
||||||
if [ "x$network_type" = "xLTE" ]; then
|
|
||||||
echo "^LTERSRP: $lte_rsrp,$lte_rsrq"
|
|
||||||
else
|
|
||||||
echo "^CSNR: $rscp,$ecio"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "+CREG: 2,1,\"$lac_code\",\"$cell_id\""
|
|
||||||
|
|
||||||
rm $T
|
|
||||||
exit 0
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"error": "",
|
|
||||||
"csq": "{CSQ}",
|
|
||||||
"signal": "{CSQ_PER}",
|
|
||||||
"rssi": "{CSQ_RSSI}",
|
|
||||||
"mode": "{MODE}",
|
|
||||||
"device": "{DEVICE}",
|
|
||||||
"operator_name": "{COPS}",
|
|
||||||
"operator": "{COPS_NUM}",
|
|
||||||
"operator_mcc": "{COPS_MCC}",
|
|
||||||
"operator_mnc": "{COPS_MNC}",
|
|
||||||
"lac_hex": "{LAC}",
|
|
||||||
"lac_dec": "{LAC_NUM}",
|
|
||||||
"cid_hex": "{CID}",
|
|
||||||
"cid_dec": "{CID_NUM}",
|
|
||||||
"tac_hex": "{TAC}",
|
|
||||||
"tac_dec": "{TAC_NUM}",
|
|
||||||
"bts_info": "{BTSINFO}",
|
|
||||||
"bts_qos_down": "{DOWN}",
|
|
||||||
"bts_qos_up": "{UP}",
|
|
||||||
"status": "{STATUS}",
|
|
||||||
"conn_time": "{CONN_TIME}",
|
|
||||||
"conn_time_sec": "{CONN_TIME_SEC}",
|
|
||||||
"iface_rx": "{RX}",
|
|
||||||
"iface_tx": "{TX}",
|
|
||||||
"rscp": "{RSCP}",
|
|
||||||
"ecio": "{ECIO}",
|
|
||||||
"rsrp": "{RSRP}",
|
|
||||||
"sinr": "{SINR}",
|
|
||||||
"rsrq": "{RSRQ}"
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
Status: {STATUS}
|
|
||||||
Connection time: {CONN_TIME}
|
|
||||||
Received / Transmitted data: {RX} / {TX}
|
|
||||||
Operator: {COPS}
|
|
||||||
Operating mode: {MODE}
|
|
||||||
Signal strength: {CSQ_PER}%
|
|
||||||
Device: {DEVICE}
|
|
||||||
MCC MNC: {COPS_MCC} {COPS_MNC}
|
|
||||||
LAC: {LAC} ({LAC_NUM})
|
|
||||||
CID: {CID} ({CID_NUM})
|
|
||||||
TAC: {TAC} ({TAC_NUM})
|
|
||||||
CSQ: {CSQ}
|
|
||||||
RSSI: {CSQ_RSSI} dBm
|
|
||||||
RSCP: {RSCP} dBm
|
|
||||||
Ec/IO: {ECIO} dB
|
|
||||||
RSRP: {RSRP} dBm
|
|
||||||
SINR: {SINR} dB
|
|
||||||
RSRQ: {RSRQ} dB
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
Staatus: {STATUS}
|
|
||||||
Ühendusaeg: {CONN_TIME}
|
|
||||||
Vastuvõetud/saadetud andmed: {RX} / {TX}
|
|
||||||
Operaator: {COPS}
|
|
||||||
Töörežiim: {MODE}
|
|
||||||
Signaali tugevus: {CSQ_PER}%
|
|
||||||
Seade: {DEVICE}
|
|
||||||
MCC MNC: {COPS_MCC} {COPS_MNC}
|
|
||||||
LAC: {LAC} ({LAC_NUM})
|
|
||||||
CID: {CID} ({CID_NUM})
|
|
||||||
TAC: {TAC} ({TAC_NUM})
|
|
||||||
CSQ: {CSQ}
|
|
||||||
RSSI: {CSQ_RSSI} dBm
|
|
||||||
RSCP: {RSCP} dBm
|
|
||||||
Ec/IO: {ECIO} dB
|
|
||||||
RSRP: {RSRP} dBm
|
|
||||||
SINR: {SINR} dB
|
|
||||||
RSRQ: {RSRQ} dB
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
Stato: {STATUS}
|
|
||||||
Tempo di connessione: {CONN_TIME}
|
|
||||||
Dati ricevuti / Trasmessi: {RX} / {TX}
|
|
||||||
Operatore: {COPS}
|
|
||||||
Tipo di connessione: {MODE}
|
|
||||||
Forza segnale: {CSQ_PER}%
|
|
||||||
Dispositivo: {DEVICE}
|
|
||||||
MCC MNC: {COPS_MCC} {COPS_MNC}
|
|
||||||
LAC: {LAC} ({LAC_NUM})
|
|
||||||
CID: {CID} ({CID_NUM})
|
|
||||||
TAC: {TAC} ({TAC_NUM})
|
|
||||||
CSQ: {CSQ}
|
|
||||||
RSSI: {CSQ_RSSI} dBm
|
|
||||||
RSCP: {RSCP} dBm
|
|
||||||
Ec/IO: {ECIO} dB
|
|
||||||
RSRP: {RSRP} dBm
|
|
||||||
SINR: {SINR} dB
|
|
||||||
RSRQ: {RSRQ} dB
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
Status: {STATUS}
|
|
||||||
Czas polaczenia: {CONN_TIME}
|
|
||||||
Przeslano danych: {RX} / {TX}
|
|
||||||
Operator: {COPS}
|
|
||||||
Tryb pracy: {MODE}
|
|
||||||
Sila sygnalu: {CSQ_PER}%
|
|
||||||
Urzadzenie: {DEVICE}
|
|
||||||
MCC MNC: {COPS_MCC} {COPS_MNC}
|
|
||||||
LAC: {LAC} ({LAC_NUM})
|
|
||||||
CID: {CID} ({CID_NUM})
|
|
||||||
TAC: {TAC} ({TAC_NUM})
|
|
||||||
CSQ: {CSQ}
|
|
||||||
RSSI: {CSQ_RSSI} dBm
|
|
||||||
RSCP: {RSCP} dBm
|
|
||||||
Ec/IO: {ECIO} dB
|
|
||||||
RSRP: {RSRP} dBm
|
|
||||||
SINR: {SINR} dB
|
|
||||||
RSRQ: {RSRQ} dB
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
|
|
||||||
config 3ginfo
|
|
||||||
option device ''
|
|
||||||
option http_port '81'
|
|
||||||
option network 'wan'
|
|
||||||
option pincode ''
|
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# (c) 2024-2025 Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
#
|
|
||||||
|
|
||||||
. /lib/functions.sh
|
|
||||||
. /usr/share/libubox/jshn.sh
|
|
||||||
|
|
||||||
FORMAT=1
|
|
||||||
[ "x$1" = "xjson" ] && FORMAT=2
|
|
||||||
ECM=""
|
|
||||||
|
|
||||||
RES="/usr/share/modemdata"
|
|
||||||
|
|
||||||
format_conn_time() {
|
|
||||||
CT=$1
|
|
||||||
D=$(expr $CT / 60 / 60 / 24)
|
|
||||||
H=$(expr $CT / 60 / 60 % 24)
|
|
||||||
M=$(expr $CT / 60 % 60)
|
|
||||||
S=$(expr $CT % 60)
|
|
||||||
printf "%dd, %02d:%02d:%02d" $D $H $M $S
|
|
||||||
}
|
|
||||||
|
|
||||||
SEPARATOR=""
|
|
||||||
parse_section() {
|
|
||||||
[ -n "$SEPARATOR" ] && echo "$SEPARATOR"
|
|
||||||
local section="$1"
|
|
||||||
config_get device "$section" device ""
|
|
||||||
config_get network "$section" network ""
|
|
||||||
config_get force_plmn "$section" force_plmn "0"
|
|
||||||
|
|
||||||
if echo "x$device" | grep -q "192.168."; then
|
|
||||||
ECM="$RES/addon/ecm/huawei.sh $device"
|
|
||||||
else
|
|
||||||
ECM=""
|
|
||||||
if [ ! -e /var/state/3ginfo-detected ]; then
|
|
||||||
[ -z "$device" ] && device=$(/usr/share/3ginfo/detectdevice.sh)
|
|
||||||
[ -z "$network" ] && network=$(/usr/share/3ginfo/detectsection.sh "$section")
|
|
||||||
fi
|
|
||||||
config_get pincode "$section" pincode ""
|
|
||||||
if [ -n "$pincode" ] && [ ! -e /var/state/3ginfo-pincode ]; then
|
|
||||||
[ -n "$device" ] && sms_tool -d "$device" at "at+cpin=\"$pincode\""
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$FORMAT" = "1" ]; then
|
|
||||||
SEPARATOR="---"
|
|
||||||
json_init
|
|
||||||
if [ -n "$ECM" ]; then
|
|
||||||
json_load "$($ECM product)"
|
|
||||||
else
|
|
||||||
json_load "$($RES/product.sh "$device")"
|
|
||||||
fi
|
|
||||||
json_get_vars vendor product revision imei iccid imsi
|
|
||||||
echo "Device: ${vendor} ${product}"
|
|
||||||
echo "Revision: ${revision}"
|
|
||||||
echo "IMEI: ${imei}"
|
|
||||||
echo "ICCID: ${iccid}"
|
|
||||||
echo "IMSI: ${imsi}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
json_init
|
|
||||||
json_load "$($RES/network.sh "$network")"
|
|
||||||
json_get_vars conn_time_sec rx tx
|
|
||||||
echo "Connected time: "$(format_conn_time ${conn_time_sec})
|
|
||||||
echo "TX: ${tx}"
|
|
||||||
echo "RX: ${rx}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
json_init
|
|
||||||
if [ -n "$ECM" ]; then
|
|
||||||
json_load "$($ECM params)"
|
|
||||||
else
|
|
||||||
json_load "$($RES/params.sh "$device" "$force_plmn")"
|
|
||||||
fi
|
|
||||||
json_get_vars signal operator_name operator_mcc operator_mnc country mode registration lac_dec lac_hex cid_dec cid_hex
|
|
||||||
echo "Signal: ${signal} %"
|
|
||||||
echo "Mode: ${mode}"
|
|
||||||
echo "Operator: ${operator_name} (${operator_mcc} ${operator_mnc})"
|
|
||||||
[ -n "$country" ] && echo "Country: ${country}"
|
|
||||||
case $registration in
|
|
||||||
0) REG="not registered";;
|
|
||||||
1) REG="registered, home network";;
|
|
||||||
2) REG="not registered, searching";;
|
|
||||||
3) REG="registration denied";;
|
|
||||||
5) REG="registered, roaming";;
|
|
||||||
6) REG="registered for SMS only, home network";;
|
|
||||||
7) REG="registered for SMS only, roaming";;
|
|
||||||
*) REG="$registration";;
|
|
||||||
esac
|
|
||||||
echo "Registration: ${REG}"
|
|
||||||
echo ""
|
|
||||||
T="21;CellID: ${cid_dec} (${cid_hex})"
|
|
||||||
T="${T}\n22;LAC: ${lac_dec} (${lac_hex})"
|
|
||||||
if json_is_a addon array; then
|
|
||||||
json_get_keys addon addon
|
|
||||||
json_select addon
|
|
||||||
for i in $addon; do
|
|
||||||
json_select "$i"
|
|
||||||
json_get_vars idx key value
|
|
||||||
json_select ..
|
|
||||||
if [ "$idx" = "10" ]; then
|
|
||||||
T="${T}\n${idx};${key}: ${value/°/°}"
|
|
||||||
else
|
|
||||||
T="${T}\n${idx};${key}: ${value}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
echo -e "$T" | sort | awk -F[\;] '{print $2}'
|
|
||||||
else
|
|
||||||
SEPARATOR=","
|
|
||||||
echo "["
|
|
||||||
if [ -n "$ECM" ]; then
|
|
||||||
$ECM product
|
|
||||||
echo ","
|
|
||||||
$RES/network.sh "$network"
|
|
||||||
echo ","
|
|
||||||
$ECM params
|
|
||||||
else
|
|
||||||
$RES/product.sh "$device"
|
|
||||||
echo ","
|
|
||||||
$RES/network.sh "$network"
|
|
||||||
echo ","
|
|
||||||
$RES/params.sh "$device" "$force_plmn"
|
|
||||||
fi
|
|
||||||
echo "]"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
config_load 3ginfo
|
|
||||||
[ "$FORMAT" = "2" ] && echo '{"res":['
|
|
||||||
config_foreach parse_section 3ginfo
|
|
||||||
[ "$FORMAT" = "2" ] && echo ']}'
|
|
||||||
touch /var/state/3ginfo-detected
|
|
||||||
touch /var/state/3ginfo-pincode
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
opengt
|
|
||||||
set com 115200n81
|
|
||||||
set comecho off
|
|
||||||
set senddelay 0.01
|
|
||||||
waitquiet 0.01 0.01
|
|
||||||
|
|
||||||
send "AT+CPIN?^m"
|
|
||||||
waitfor 2 "OK" "+CME ERROR"
|
|
||||||
if % = -1 goto timeout
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
:timeout
|
|
||||||
exit 1
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# (c) 2023-2024 Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
#
|
|
||||||
|
|
||||||
# find any device
|
|
||||||
DEVICES=$(find /dev -name "ttyUSB*" -o -name "ttyACM*" -o -name "wwan*at*" | sort -r)
|
|
||||||
for DEVICE in $DEVICES; do
|
|
||||||
gcom -d $DEVICE -s /usr/share/3ginfo/check.gcom >/dev/null 2>&1
|
|
||||||
if [ $? = 0 ]; then
|
|
||||||
uci set 3ginfo.@3ginfo[0].device="$DEVICE"
|
|
||||||
uci commit 3ginfo
|
|
||||||
echo "$DEVICE"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
exit 0
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# (c) 2024 Cezary Jackiewicz <cezary@eko.one.pl>
|
|
||||||
#
|
|
||||||
|
|
||||||
getdevicepath() {
|
|
||||||
devname="$(basename $1)"
|
|
||||||
case "$devname" in
|
|
||||||
'wwan'*'at'*)
|
|
||||||
devpath="$(readlink -f /sys/class/wwan/$devname/device)"
|
|
||||||
echo ${devpath%/*/*/*}
|
|
||||||
;;
|
|
||||||
'ttyACM'*)
|
|
||||||
devpath="$(readlink -f /sys/class/tty/$devname/device)"
|
|
||||||
echo ${devpath%/*}
|
|
||||||
;;
|
|
||||||
'tty'*)
|
|
||||||
devpath="$(readlink -f /sys/class/tty/$devname/device)"
|
|
||||||
echo ${devpath%/*/*}
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
devpath="$(readlink -f /sys/class/usbmisc/$devname/device)"
|
|
||||||
echo ${devpath%/*}
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
CONFIGSEC=$1
|
|
||||||
if [ -n "$CONFIGSEC" ]; then
|
|
||||||
SEC=$(uci -q get 3ginfo.${CONFIGSEC}.network)
|
|
||||||
if [ -n "$SEC" ]; then
|
|
||||||
echo "$SEC"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
DEVICE=$(uci -q get 3ginfo.${CONFIGSEC}.device)
|
|
||||||
if [ -z "$DEVICE" ]; then
|
|
||||||
echo ""
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
DEVPATH=$(getdevicepath "$DEVICE")
|
|
||||||
DEVICES=$(uci show network | awk '/network\..*\.device/')
|
|
||||||
for T in $DEVICES; do
|
|
||||||
T1=$(echo "$T" | cut -f2 -d= | xargs)
|
|
||||||
if [ -e "$T1" ]; then
|
|
||||||
if [ "$DEVPATH" = "$(getdevicepath "$T1")" ]; then
|
|
||||||
T2=$(echo "$T" | cut -f2 -d.)
|
|
||||||
uci set 3ginfo.${CONFIGSEC}.network="$T2"
|
|
||||||
uci commit 3ginfo
|
|
||||||
echo "$T2"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
exit 0
|
|
||||||
+1
-1
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=3proxy
|
PKG_NAME:=3proxy
|
||||||
PKG_VERSION:=0.9.5
|
PKG_VERSION:=0.9.5
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=4
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/3proxy/3proxy/tar.gz/$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/3proxy/3proxy/tar.gz/$(PKG_VERSION)?
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2026 jjm2473@gmail.com
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v3.
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
AGENTFLOW_ARCH_x86_64:=amd64
|
||||||
|
AGENTFLOW_ARCH_aarch64:=arm64
|
||||||
|
AGENTFLOW_ARCH:=$(AGENTFLOW_ARCH_$(ARCH))
|
||||||
|
|
||||||
|
AGENTFLOW_HASH_x86_64:=454857022d555b23979bd7b9116ef926ce7117e9e6034116f3223bb72cae07db
|
||||||
|
AGENTFLOW_HASH_aarch64:=34dfe07fd2a1bcb7de8eadb41dd0a67b46d5db78f4ca14d1835fe94608c0579a
|
||||||
|
|
||||||
|
PKG_NAME:=agentflow
|
||||||
|
PKG_VERSION:=0.3.1
|
||||||
|
PKG_RELEASE:=9
|
||||||
|
|
||||||
|
AGENTFLOW_URL_FILE:=agentflow-linux-$(AGENTFLOW_ARCH)
|
||||||
|
AGENTFLOW_DOWNLOAD:=$(AGENTFLOW_URL_FILE)-$(AGENTFLOW_HASH_$(ARCH))
|
||||||
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||||
|
|
||||||
|
PKG_BUILD_PARALLEL:=1
|
||||||
|
PKG_USE_MIPS16:=0
|
||||||
|
STRIP:=true
|
||||||
|
RSTRIP:=:
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
define Download/agentflow
|
||||||
|
URL:=https://fw.koolcenter.com/binary/geili/agentflow/build/
|
||||||
|
URL_FILE:=$(AGENTFLOW_URL_FILE)
|
||||||
|
FILE:=$(AGENTFLOW_DOWNLOAD)
|
||||||
|
HASH:=skip
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/$(PKG_NAME)
|
||||||
|
SECTION:=net
|
||||||
|
CATEGORY:=Network
|
||||||
|
SUBMENU:=Web Servers/Proxies
|
||||||
|
TITLE:=AgentFlow
|
||||||
|
DEPENDS:=@(x86_64||aarch64) +git +git-http +mise
|
||||||
|
URL:=https://agentflow.geili.ai/
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/$(PKG_NAME)/description
|
||||||
|
AgentFlow provides a Web UI for orchestrating coding agents and workflows.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/$(PKG_NAME)/conffiles
|
||||||
|
/etc/config/agentflow
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/$(PKG_NAME)/prerm
|
||||||
|
#!/bin/sh
|
||||||
|
if [ "$${IPKG_INSTROOT}" = "" ]; then
|
||||||
|
if [ "$$(readlink /usr/share/linkeasefull/desktop-apps.d/30-agentflow.json 2>/dev/null)" = "/usr/share/agentflow/agentflow-plugin.json" ]; then
|
||||||
|
rm -f /usr/share/linkeasefull/desktop-apps.d/30-agentflow.json
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
$(INSTALL_DIR) $(PKG_BUILD_DIR)
|
||||||
|
$(CP) $(DL_DIR)/$(AGENTFLOW_DOWNLOAD) $(PKG_BUILD_DIR)/agentflow
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Configure
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/$(PKG_NAME)/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d $(1)/etc/uci-defaults $(1)/etc/config $(1)/usr/share/agentflow/www $(1)/usr/share/linkeasefull/desktop-apps.d
|
||||||
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/agentflow $(1)/usr/sbin/agentflow
|
||||||
|
$(INSTALL_BIN) ./files/agentflow.init $(1)/etc/init.d/agentflow
|
||||||
|
$(INSTALL_BIN) ./files/agentflow.uci-default $(1)/etc/uci-defaults/09-agentflow
|
||||||
|
$(INSTALL_CONF) ./files/agentflow.config $(1)/etc/config/agentflow
|
||||||
|
$(INSTALL_DATA) ./files/agentflow-plugin.json $(1)/usr/share/agentflow/agentflow-plugin.json
|
||||||
|
$(INSTALL_DATA) ./files/www/logo.svg $(1)/usr/share/agentflow/www/logo.svg
|
||||||
|
ln -sf /usr/share/agentflow/agentflow-plugin.json $(1)/usr/share/linkeasefull/desktop-apps.d/30-agentflow.json
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call Download,agentflow))
|
||||||
|
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "agentflow",
|
||||||
|
"name": "AgentFlow",
|
||||||
|
"icon": "logo.svg",
|
||||||
|
"staticRoot": "/usr/share/agentflow/www",
|
||||||
|
"desktop": {
|
||||||
|
"mode": "module",
|
||||||
|
"entry": "desktop-entry.js",
|
||||||
|
"isolation": "shadow-dom"
|
||||||
|
},
|
||||||
|
"standalone": {
|
||||||
|
"entry": "index.html",
|
||||||
|
"basePath": "/apps/agentflow/",
|
||||||
|
"url": "/cgi-bin/luci/admin/services/agentflow/open",
|
||||||
|
"externalOpen": {
|
||||||
|
"enabled": true,
|
||||||
|
"label": "Open AgentFlow"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"auth": {
|
||||||
|
"mode": "passthrough"
|
||||||
|
},
|
||||||
|
"backend": {
|
||||||
|
"type": "http",
|
||||||
|
"scheme": "http",
|
||||||
|
"host": "127.0.0.1",
|
||||||
|
"portFromUci": "agentflow.@agentflow[0].port",
|
||||||
|
"defaultPort": 9000,
|
||||||
|
"upstreamBasePath": "/apps/agentflow/",
|
||||||
|
"pathMode": "preserve",
|
||||||
|
"proxyMode": "app-base"
|
||||||
|
},
|
||||||
|
"window": {
|
||||||
|
"width": 1180,
|
||||||
|
"height": 760,
|
||||||
|
"singleton": true
|
||||||
|
},
|
||||||
|
"capabilities": ["agent", "coding", "workflow"],
|
||||||
|
"categories": ["development", "ai"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
config agentflow
|
||||||
|
option enabled '0'
|
||||||
|
option data_dir ''
|
||||||
|
option host '0.0.0.0'
|
||||||
|
option port '9000'
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
|
||||||
|
START=93
|
||||||
|
USE_PROCD=1
|
||||||
|
|
||||||
|
get_config() {
|
||||||
|
config_get_bool enabled "$1" enabled 0
|
||||||
|
config_get data_dir "$1" data_dir ""
|
||||||
|
config_get host "$1" host "0.0.0.0"
|
||||||
|
config_get port "$1" port "9000"
|
||||||
|
}
|
||||||
|
|
||||||
|
start_service() {
|
||||||
|
config_load agentflow
|
||||||
|
config_foreach get_config agentflow
|
||||||
|
[ "$enabled" = 1 ] || return 1
|
||||||
|
|
||||||
|
[ -x /usr/sbin/agentflow ] || {
|
||||||
|
logger -t agentflow "missing executable: /usr/sbin/agentflow"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
[ -r /lib/functions/mise.sh ] || {
|
||||||
|
logger -t agentflow "missing mise environment helper"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
. /lib/functions/mise.sh
|
||||||
|
if ! istore_runtime_env; then
|
||||||
|
logger -t agentflow "failed to initialize mise environment"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
mkdir -p "$data_dir" "$data_dir/data" || return 1
|
||||||
|
|
||||||
|
logger -t agentflow "starting AgentFlow on $host:$port"
|
||||||
|
procd_open_instance
|
||||||
|
procd_set_param command /usr/sbin/agentflow
|
||||||
|
procd_set_param env \
|
||||||
|
"AGENT_FLOW_DATA=$data_dir/data" \
|
||||||
|
"AGENT_FLOW_HOST=$host" \
|
||||||
|
"AGENT_FLOW_PORT=$port" \
|
||||||
|
"HOME=$HOME" \
|
||||||
|
"PATH=$PATH"
|
||||||
|
procd_set_param stdout 1
|
||||||
|
procd_set_param stderr 1
|
||||||
|
procd_set_param respawn
|
||||||
|
procd_close_instance
|
||||||
|
}
|
||||||
|
|
||||||
|
service_triggers() {
|
||||||
|
procd_add_reload_trigger "agentflow"
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
[ ! -f "/usr/share/ucitrack/luci-app-agentflow.json" ] && {
|
||||||
|
cat > /usr/share/ucitrack/luci-app-agentflow.json << EEOF
|
||||||
|
{
|
||||||
|
"config": "agentflow",
|
||||||
|
"init": "agentflow"
|
||||||
|
}
|
||||||
|
EEOF
|
||||||
|
}
|
||||||
|
|
||||||
|
uci -q batch <<-EOF >/dev/null
|
||||||
|
delete ucitrack.@agentflow[-1]
|
||||||
|
add ucitrack agentflow
|
||||||
|
set ucitrack.@agentflow[-1].init=agentflow
|
||||||
|
commit ucitrack
|
||||||
|
EOF
|
||||||
|
|
||||||
|
/etc/init.d/agentflow enable
|
||||||
|
/etc/init.d/agentflow start
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<svg
|
||||||
|
width="150"
|
||||||
|
height="150"
|
||||||
|
viewBox="0 0 150 150"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
>
|
||||||
|
<rect width="150" height="150" rx="30" fill="#f5f1e8" />
|
||||||
|
<text
|
||||||
|
x="50%"
|
||||||
|
y="54%"
|
||||||
|
text-anchor="middle"
|
||||||
|
dominant-baseline="middle"
|
||||||
|
font-size="68"
|
||||||
|
font-weight="700"
|
||||||
|
font-family="Georgia, 'Times New Roman', serif"
|
||||||
|
letter-spacing="-4"
|
||||||
|
fill="#111111"
|
||||||
|
>
|
||||||
|
AF
|
||||||
|
</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 408 B |
@@ -0,0 +1,48 @@
|
|||||||
|
import json
|
||||||
|
import pathlib
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
|
||||||
|
APP_DIR = pathlib.Path(__file__).resolve().parents[1]
|
||||||
|
|
||||||
|
|
||||||
|
class DesktopManifestContractTest(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.manifest = json.loads(
|
||||||
|
(APP_DIR / "files" / "agentflow-plugin.json").read_text()
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_manifest_uses_agentflow_app_base_proxy(self):
|
||||||
|
self.assertEqual(self.manifest["id"], "agentflow")
|
||||||
|
self.assertEqual(self.manifest["staticRoot"], "/usr/share/agentflow/www")
|
||||||
|
self.assertEqual(self.manifest["standalone"]["entry"], "index.html")
|
||||||
|
self.assertEqual(self.manifest["standalone"]["basePath"], "/apps/agentflow/")
|
||||||
|
self.assertEqual(
|
||||||
|
self.manifest["standalone"]["url"],
|
||||||
|
"/cgi-bin/luci/admin/services/agentflow/open",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
self.manifest["standalone"]["externalOpen"],
|
||||||
|
{"enabled": True, "label": "Open AgentFlow"},
|
||||||
|
)
|
||||||
|
self.assertEqual(self.manifest["auth"]["mode"], "passthrough")
|
||||||
|
|
||||||
|
backend = self.manifest["backend"]
|
||||||
|
self.assertEqual(backend["upstreamBasePath"], "/apps/agentflow/")
|
||||||
|
self.assertEqual(backend["pathMode"], "preserve")
|
||||||
|
self.assertEqual(backend["proxyMode"], "app-base")
|
||||||
|
|
||||||
|
def test_desktop_entry_matches_manifest_contract(self):
|
||||||
|
desktop = self.manifest["desktop"]
|
||||||
|
self.assertEqual(desktop["mode"], "module")
|
||||||
|
self.assertEqual(desktop["entry"], "desktop-entry.js")
|
||||||
|
self.assertEqual(desktop["isolation"], "shadow-dom")
|
||||||
|
|
||||||
|
self.assertFalse(
|
||||||
|
(APP_DIR / "files" / "www" / "desktop-entry.js").exists(),
|
||||||
|
"desktop-entry.js must be served by AgentFlow backend, not the static iframe wrapper",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=airconnect
|
PKG_NAME:=airconnect
|
||||||
PKG_VERSION:=1.11.2
|
PKG_VERSION:=1.11.3
|
||||||
PKG_RELEASE=1
|
PKG_RELEASE=1
|
||||||
|
|
||||||
PKG_SOURCE:=AirConnect-$(PKG_VERSION).zip
|
PKG_SOURCE:=AirConnect-$(PKG_VERSION).zip
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2018 Dengfeng Liu
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v3.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=apfree-wifidog
|
||||||
|
PKG_VERSION:=9.09.2938
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
|
PKG_SOURCE_URL:=https://codeload.github.com/liudf0716/$(PKG_NAME)/tar.gz/$(PKG_VERSION)?
|
||||||
|
PKG_HASH:=skip
|
||||||
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||||
|
|
||||||
|
PKG_MAINTAINER:=Dengfeng Liu <liudf0716@gmail.com>
|
||||||
|
PKG_LICENSE:=GPL-3.0-or-later
|
||||||
|
PKG_LICENSE_FILES:=COPYING
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
include $(INCLUDE_DIR)/cmake.mk
|
||||||
|
|
||||||
|
define Package/apfree-wifidog
|
||||||
|
SUBMENU:=Captive Portals
|
||||||
|
SECTION:=net
|
||||||
|
CATEGORY:=Network
|
||||||
|
DEPENDS:=+zlib +libjson-c +libevent2 +libevent2-openssl +libuci \
|
||||||
|
+openssl-util +libnetfilter-queue +conntrack +libmosquitto \
|
||||||
|
+libnftnl +libmnl +libbpf +aw-bpf
|
||||||
|
TITLE:=Apfree's wireless captive portal solution
|
||||||
|
URL:=https://github.com/liudf0716/apfree_wifidog
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/apfree-wifidog/description
|
||||||
|
The ApFree Wifidog project is a complete and embeddable captive portal
|
||||||
|
solution for wireless community groups or individuals who wish to open a free
|
||||||
|
Hotspot while still preventing abuse of their Internet connection.
|
||||||
|
It's enhanced wifidog
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/apfree-wifidog/conffiles
|
||||||
|
/etc/config/wifidogx
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/apfree-wifidog/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
|
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/wifidogx $(1)/usr/bin/wifidogx
|
||||||
|
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/wdctlx $(1)/usr/bin/wdctlx
|
||||||
|
$(INSTALL_DIR) $(1)/usr/sbin
|
||||||
|
$(INSTALL_DIR) $(1)/etc
|
||||||
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/wifidog-msg.html $(1)/etc/
|
||||||
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/wifidog-redir.html $(1)/etc/
|
||||||
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/wifidog-redir.html.front $(1)/etc/
|
||||||
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/wifidog-redir.html.rear $(1)/etc/
|
||||||
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/authserver-offline.html $(1)/etc/
|
||||||
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/internet-offline.html $(1)/etc/
|
||||||
|
$(INSTALL_DIR) $(1)/etc/init.d
|
||||||
|
$(INSTALL_BIN) ./files/wifidogx.init $(1)/etc/init.d/wifidogx
|
||||||
|
$(INSTALL_DIR) $(1)/etc/config
|
||||||
|
$(CP) ./files/wifidogx.conf $(1)/etc/config/wifidogx
|
||||||
|
$(INSTALL_DIR) $(1)/etc/wifidogx
|
||||||
|
$(INSTALL_DIR) $(1)/www/cgi-bin
|
||||||
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/wifi-config $(1)/www/cgi-bin/
|
||||||
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/wifi-diag $(1)/www/cgi-bin/
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,apfree-wifidog))
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
[![license][1]][2]
|
||||||
|
[![PRs Welcome][3]][4]
|
||||||
|
[![Issues Welcome][5]][6]
|
||||||
|
[![Release Version][7]][8]
|
||||||
|
[![OpenWrt][11]][12]
|
||||||
|
[![Join the QQ Group][15]][16]
|
||||||
|
|
||||||
|
|
||||||
|
[1]: https://img.shields.io/badge/license-GPLV3-brightgreen.svg?style=plastic
|
||||||
|
[2]: https://github.com/liudf0716/apfree_wifidog/blob/master/COPYING
|
||||||
|
[3]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=plastic
|
||||||
|
[4]: https://github.com/liudf0716/apfree_wifidog/pulls
|
||||||
|
[5]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg?style=plastic
|
||||||
|
[6]: https://github.com/liudf0716/apfree_wifidog/issues/new
|
||||||
|
[7]: https://img.shields.io/badge/release-3.11.1716-red.svg?style=plastic
|
||||||
|
[8]: https://github.com/liudf0716/apfree_wifidog/releases
|
||||||
|
[11]: https://img.shields.io/badge/Platform-%20OpenWrt%7C%20LEDE%20-brightgreen.svg?style=plastic
|
||||||
|
[12]: https://github.com/KunTengRom/kunteng-lede-17.01.4
|
||||||
|
[13]: https://img.shields.io/badge/KunTeng-Inside-blue.svg?style=plastic
|
||||||
|
[14]: https://www.kunteng.org.cn
|
||||||
|
[15]: https://img.shields.io/badge/chat-qq%20group-brightgreen.svg
|
||||||
|
[16]: https://jq.qq.com/?_wv=1027&k=4ADDSev
|
||||||
|
|
||||||
|
## ApFree WiFiDog: A high performance captive portal solution for HTTP(s)
|
||||||
|
|
||||||
|
ApFree WiFiDog is a high performance captive portal solution for HTTP(s), which mainly used in ([LEDE](https://github.com/lede-project/source) & [OpenWrt](https://github.com/openwrt/openwrt)) platform.
|
||||||
|
|
||||||
|
|
||||||
|
**[中文介绍](https://github.com/liudf0716/apfree_wifidog/blob/master/README_ZH.md)**
|
||||||
|
|
||||||
|
## Enhancement of apfree-wifidog
|
||||||
|
|
||||||
|
In fact, the title should be why we choose apfree-wifidog, the reason was the following:
|
||||||
|
|
||||||
|
> Stable
|
||||||
|
|
||||||
|
apfree-wifidog was widely used in tens of thousands device, which were running in business scene. In order to improve its stable, we rewrite all iptables rule by api instead of fork call, which will easily cause deadlock in multithread-fork running environment. we also re-write the code and replace libhttpd (which is unmaintained for years) with libevent
|
||||||
|
|
||||||
|
> Performance
|
||||||
|
|
||||||
|
apfree-wifidog's http request-response is more quick, u can find statistic data in our test document
|
||||||
|
|
||||||
|
> HTTPs redirect
|
||||||
|
|
||||||
|
apfree-wifidog support https redirect, in current internet environment, captive portal solution without supporting https redirect will become unsuitable gradually
|
||||||
|
|
||||||
|
|
||||||
|
> More features
|
||||||
|
|
||||||
|
apfree-wifidog support mac temporary-pass, ip,domain,pan-domain,white-mac,black-mac rule and etc. all these rules can be applied without restarting wifidog
|
||||||
|
|
||||||
|
> MQTT support
|
||||||
|
|
||||||
|
by enable mqtt support, u can remotely deliver such as trusted ip, domain and pan-domain rules to apfree wifidog
|
||||||
|
|
||||||
|
> Compilable with wifidog protocol
|
||||||
|
|
||||||
|
u don't need to modify your wifidog authentication server to adapt apfree-wifidog; if u have pression on server-side, apfree wifidog's improved protocol can greatly relieve it, which disabled by default
|
||||||
|
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
before starting apfree-wifidog, we must know how to configure it. apfree-wifidog use OpenWrt standard uci config system, all your apfree-wifidog configure information stored in `/etc/confg/wifidogx`, which will be parsed by `/etc/init.d/wifidogx` to /tmp/wifidog.conf, apfree-wifidog's real configure file is `/tmp/wifidog.conf`
|
||||||
|
|
||||||
|
The default apfree-wifidog UCI configuration file like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
config wifidog
|
||||||
|
option gateway_interface 'br-lan'
|
||||||
|
option auth_server_hostname 'wifidog.kunteng.org.cn'
|
||||||
|
option auth_server_port 443
|
||||||
|
option auth_server_path '/wifidog/'
|
||||||
|
option check_interval 60
|
||||||
|
option client_timeout 5
|
||||||
|
option apple_cna 1
|
||||||
|
option thread_number 5
|
||||||
|
option wired_passed 0
|
||||||
|
option enable 0
|
||||||
|
```
|
||||||
|
|
||||||
|
> auth_server_hostname was apfree-wifidog auth server, it can be domain or ip; wifidog.kunteng.org.cn is a free auth server we provided, it was also [open source](https://github.com/wificoin-project/wwas)
|
||||||
|
|
||||||
|
> apple_cna 1 apple captive detect deceive; 2 apple captive detect deceive to disallow portal page appear
|
||||||
|
|
||||||
|
> wired_passed means whether LAN access devices need to auth or not, value 1 means no need to auth
|
||||||
|
|
||||||
|
> enable means whether start apfree-wifidog when we executed `/etc/init.d/wifidogx start`, if u wanted to start apfree-wifidog, you must set enable to 1 before executing `/etc/init.d/wifidogx start`
|
||||||
|
|
||||||
|
### How to support https redirect
|
||||||
|
|
||||||
|
In order to support https redirect, apfree-wifidog need x509 pem cert and private key, u can generate yourself like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
PX5G_BIN="/usr/sbin/px5g"
|
||||||
|
OPENSSL_BIN="/usr/bin/openssl"
|
||||||
|
APFREE_CERT="/etc/apfree.crt"
|
||||||
|
APFREE_KEY="/etc/apfree.key"
|
||||||
|
|
||||||
|
generate_keys() {
|
||||||
|
local days bits country state location commonname
|
||||||
|
|
||||||
|
# Prefer px5g for certificate generation (existence evaluated last)
|
||||||
|
local GENKEY_CMD=""
|
||||||
|
local UNIQUEID=$(dd if=/dev/urandom bs=1 count=4 | hexdump -e '1/1 "%02x"')
|
||||||
|
[ -x "$OPENSSL_BIN" ] && GENKEY_CMD="$OPENSSL_BIN req -x509 -sha256 -outform pem -nodes"
|
||||||
|
[ -x "$PX5G_BIN" ] && GENKEY_CMD="$PX5G_BIN selfsigned -pem"
|
||||||
|
[ -n "$GENKEY_CMD" ] && {
|
||||||
|
$GENKEY_CMD \
|
||||||
|
-days ${days:-730} -newkey rsa:${bits:-2048} -keyout "${APFREE_KEY}.new" -out "${APFREE_CERT}.new" \
|
||||||
|
-subj /C="${country:-CN}"/ST="${state:-localhost}"/L="${location:-Unknown}"/O="${commonname:-ApFreeWiFidog}$UNIQUEID"/CN="${commonname:-ApFreeWiFidog}"
|
||||||
|
sync
|
||||||
|
mv "${APFREE_KEY}.new" "${APFREE_KEY}"
|
||||||
|
mv "${APFREE_CERT}.new" "${APFREE_CERT}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
or when u start `/etc/init.d/wifidogx start`, it will generate it automatically
|
||||||
|
|
||||||
|
|
||||||
|
For more information, please refer to the upstream [project page](https://github.com/liudf0716/apfree_wifidog)
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
config wifidogx 'common'
|
||||||
|
option external_interface 'wan'
|
||||||
|
option check_interval '60'
|
||||||
|
option client_timeout '60'
|
||||||
|
option wired_passed '1'
|
||||||
|
option enabled '1'
|
||||||
|
option log_level '0'
|
||||||
|
option js_filter '1'
|
||||||
|
option apple_cna '1'
|
||||||
|
option auth_server_mode 'local'
|
||||||
|
option enable_anti_nat '0'
|
||||||
|
option ttl_values '64,128,255'
|
||||||
|
option ap_device_id 'AW85844955CC7D742A339'
|
||||||
|
option ap_mac_address '5C-C7-D7-42-A3-39'
|
||||||
|
option ap_longitude '116.395000'
|
||||||
|
option ap_latitude '039.911000'
|
||||||
|
option disable_portal_auth '0'
|
||||||
|
option enable_privileged_ops '0'
|
||||||
|
option privileged_ops_secret 'chawrt@2026'
|
||||||
|
option device_id 'AW58534605CC7D742A339'
|
||||||
|
option local_portal 'https://qq.com'
|
||||||
|
|
||||||
|
config gateway 'apfree'
|
||||||
|
option gateway_name 'br-lan'
|
||||||
|
option gateway_channel 'apfree'
|
||||||
|
option gateway_auth_enabled '1'
|
||||||
|
option gateway_id '5CC7D742A336'
|
||||||
|
option gateway_subnetv4 '192.168.8.1/24'
|
||||||
|
|
||||||
|
config auth 'local'
|
||||||
|
option auth_server_hostname '192.168.8.109'
|
||||||
|
option auth_server_port '8001'
|
||||||
|
option auth_server_path '/wifidog/'
|
||||||
|
|
||||||
|
config longconn 'openclaw'
|
||||||
|
option long_conn_mode 'ws'
|
||||||
|
option ws_server_hostname '192.168.8.109'
|
||||||
|
option ws_server_port '8001'
|
||||||
|
option ws_server_path '/ws/wifidogx'
|
||||||
@@ -0,0 +1,304 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
# Copyright (C) 2018 Dengfeng Liu
|
||||||
|
|
||||||
|
# After aw-bpf (START=98) so dns_ringbuf_portal is pinned for wildcard trust.
|
||||||
|
START=99
|
||||||
|
USE_PROCD=1
|
||||||
|
NAME=wifidogx
|
||||||
|
PROG="/usr/bin/${NAME}"
|
||||||
|
CONFIGFILE="/tmp/wifidogx.conf"
|
||||||
|
|
||||||
|
handle_gateway() {
|
||||||
|
local section="$1"
|
||||||
|
local gateway_name gateway_channel gateway_id
|
||||||
|
local gateway_subnetv4
|
||||||
|
local gateway_auth_enabled
|
||||||
|
|
||||||
|
config_get gateway_name "$section" gateway_name
|
||||||
|
config_get gateway_channel "$section" gateway_channel
|
||||||
|
config_get gateway_id "$section" gateway_id
|
||||||
|
config_get gateway_auth_enabled "$section" gateway_auth_enabled 1
|
||||||
|
|
||||||
|
|
||||||
|
if [ -z "$gateway_name" ] || [ -z "$gateway_channel" ] ; then
|
||||||
|
echo "gateway_name and gateway_channel are required for $section" >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get gateway_id from gateway_name if not set
|
||||||
|
if [ -z "$gateway_id" ]; then
|
||||||
|
gateway_id=$(ifconfig "$gateway_name" | awk '/HWaddr/ {print toupper($5)}' | tr -d ':')
|
||||||
|
if [ -z "$gateway_id" ]; then
|
||||||
|
echo "Failed to get gateway_id for $gateway_name" >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
uci set wifidogx."$section".gateway_id="$gateway_id"
|
||||||
|
uci commit wifidogx
|
||||||
|
fi
|
||||||
|
# according to the gateway_name to get the subnetv4
|
||||||
|
local gateway_ipv4=$(ifconfig "$gateway_name" | awk '/inet addr:/ {print $2}' | cut -d: -f2)
|
||||||
|
local gateway_maskv4=$(ifconfig "$gateway_name" | awk '/Mask:/ {print $4}' | cut -d: -f2)
|
||||||
|
[ -z "$gateway_ipv4" ] && echo "Failed to get gateway_ipv4 for $gateway_name" >&2 && return
|
||||||
|
[ -z "$gateway_maskv4" ] && echo "Failed to get gateway_maskv4 for $gateway_name" >&2 && return
|
||||||
|
|
||||||
|
# change the gateway_ip4/gateway_maskv4 to CIDR format
|
||||||
|
local mask_bits=0
|
||||||
|
local mask_value=$(printf '%d' "0x$(echo $gateway_maskv4 | tr '.' ' ' | awk '{printf "%02x%02x%02x%02x",$1,$2,$3,$4}')")
|
||||||
|
while [ $mask_value -ne 0 ]; do
|
||||||
|
mask_bits=$((mask_bits + (mask_value & 1)))
|
||||||
|
mask_value=$((mask_value >> 1))
|
||||||
|
done
|
||||||
|
gateway_subnetv4="$gateway_ipv4/$mask_bits"
|
||||||
|
|
||||||
|
uci set wifidogx."$section".gateway_subnetv4="$gateway_subnetv4"
|
||||||
|
uci commit wifidogx
|
||||||
|
|
||||||
|
printf "GatewaySetting {\n\tGatewayAuthEnabled %s\n\tGatewayInterface %s\n\tGatewayChannel %s\n\tGatewayID %s\n\tGatewaySubnetV4 %s\n}\n" \
|
||||||
|
"${gateway_auth_enabled}" "${gateway_name}" "${gateway_channel}" "${gateway_id}" "${gateway_subnetv4}" >> "$CONFIGFILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
add_white_list_entries() {
|
||||||
|
local list_type="$1"
|
||||||
|
local uci_field="$2"
|
||||||
|
local target_variable="$3"
|
||||||
|
|
||||||
|
list_type=$(uci get wifidogx.common."$list_type")
|
||||||
|
for group in $list_type; do
|
||||||
|
group_list=$(uci get wifidogx."$group"."$uci_field")
|
||||||
|
if [ -n "$group_list" ]; then
|
||||||
|
eval "$target_variable=\"\${$target_variable} \$group_list\""
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_common_settings() {
|
||||||
|
printf "CheckInterval %s\nClientTimeout %s\nJsFilter %s\nWiredPassed %s\nBypassAppleCNA %s\n" \
|
||||||
|
"$check_interval" "$client_timeout" "$js_filter" "$wired_passed" "$apple_cna" >> "$CONFIGFILE"
|
||||||
|
|
||||||
|
printf "EnableAntiNat %s\n" "$enable_anti_nat" >> "$CONFIGFILE"
|
||||||
|
printf "TTLValues %s\n" "$ttl_values" >> "$CONFIGFILE"
|
||||||
|
printf "DisablePortalAuth %s\n" "$disable_portal_auth" >> "$CONFIGFILE"
|
||||||
|
printf "EnablePrivilegedOps %s\n" "$enable_privileged_ops" >> "$CONFIGFILE"
|
||||||
|
[ -n "$privileged_ops_secret" ] && printf "PrivilegedOpsSecret %s\n" "$privileged_ops_secret" >> "$CONFIGFILE"
|
||||||
|
|
||||||
|
[ -n "$anti_nat_permit_macs" ] && printf "AntiNatPermitMACs %s\n" "$anti_nat_permit_macs" >> "$CONFIGFILE"
|
||||||
|
|
||||||
|
process_trusted_list() {
|
||||||
|
local list="$1"
|
||||||
|
local config_name="$2"
|
||||||
|
|
||||||
|
if [ -n "$list" ]; then
|
||||||
|
# Clean up whitespace and remove duplicates
|
||||||
|
list=$(echo "$list" | sed -e 's/^[[:space:]]*//;s/[[:space:]]*$//;s/[[:space:]]\+/ /g' \
|
||||||
|
| tr ' ' '\n' | sort -u | tr '\n' ',' | sed 's/,$//')
|
||||||
|
printf "%s %s\n" "$config_name" "$list" >> "$CONFIGFILE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
process_trusted_list "$trusted_domains" "TrustedDomains"
|
||||||
|
process_trusted_list "$trusted_macs" "TrustedMACList"
|
||||||
|
process_trusted_list "$trusted_wildcard_domains" "TrustedWildcardDomains"
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_device_info() {
|
||||||
|
# Check if any device info fields are set
|
||||||
|
if [ -n "$ap_device_id" ] || [ -n "$ap_mac_address" ] || [ -n "$ap_longitude" ] || [ -n "$ap_latitude" ] || [ -n "$location_id" ]; then
|
||||||
|
printf "DeviceInfo {\n" >> "$CONFIGFILE"
|
||||||
|
|
||||||
|
[ -n "$ap_device_id" ] && printf "\tApDeviceId %s\n" "$ap_device_id" >> "$CONFIGFILE"
|
||||||
|
[ -n "$ap_mac_address" ] && printf "\tApMacAddress %s\n" "$ap_mac_address" >> "$CONFIGFILE"
|
||||||
|
[ -n "$ap_longitude" ] && printf "\tApLongitude %s\n" "$ap_longitude" >> "$CONFIGFILE"
|
||||||
|
[ -n "$ap_latitude" ] && printf "\tApLatitude %s\n" "$ap_latitude" >> "$CONFIGFILE"
|
||||||
|
[ -n "$location_id" ] && printf "\tLocationId %s\n" "$location_id" >> "$CONFIGFILE"
|
||||||
|
|
||||||
|
printf "}\n" >> "$CONFIGFILE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_auth_server_settings() {
|
||||||
|
# 获取选中的认证服务器配置
|
||||||
|
local selected_auth_server
|
||||||
|
selected_auth_server=$(uci get wifidogx.common.selected_auth_server 2>/dev/null)
|
||||||
|
|
||||||
|
# 如果是云认证或旁路模式,需要验证选中的认证服务器
|
||||||
|
if [ "$auth_server_mode" = "cloud" ] || [ "$auth_server_mode" = "bypass" ]; then
|
||||||
|
if [ -z "$selected_auth_server" ]; then
|
||||||
|
echo "Error: selected_auth_server is required for $auth_server_mode mode" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local auth_server_hostname auth_server_port auth_server_path
|
||||||
|
|
||||||
|
uci_validate_section "$NAME" "auth" "$selected_auth_server" \
|
||||||
|
'auth_server_hostname:string:192.168.1.1' \
|
||||||
|
'auth_server_port:port:80' \
|
||||||
|
'auth_server_path:string:/wifidog/'
|
||||||
|
|
||||||
|
export auth_server_hostname
|
||||||
|
export auth_server_port
|
||||||
|
export auth_server_path
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$auth_server_mode" in
|
||||||
|
cloud|bypass)
|
||||||
|
printf "AuthServerMode 0\n" >> "$CONFIGFILE"
|
||||||
|
printf "DeviceID %s\nAuthServer {\n\tHostname %s\n\tHTTPPort %s\n\tPath %s\n}\n" \
|
||||||
|
"$device_id" "$auth_server_hostname" "$auth_server_port" "$auth_server_path" >> "$CONFIGFILE"
|
||||||
|
;;
|
||||||
|
local)
|
||||||
|
printf "AuthServerMode 2\n" >> "$CONFIGFILE"
|
||||||
|
[ -n "$device_id" ] && printf "DeviceID %s\n" "$device_id" >> "$CONFIGFILE"
|
||||||
|
[ -n "$auth_server_offline_file" ] && printf "AuthServerOfflineFile %s\n" "$auth_server_offline_file" >> "$CONFIGFILE"
|
||||||
|
[ -n "$local_portal" ] && printf "LocalPortal %s\n" "$local_portal" >> "$CONFIGFILE"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
[ -n "$internet_offline_file" ] && printf "InternetOfflineFile %s\n" "$internet_offline_file" >> "$CONFIGFILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_longconn_settings() {
|
||||||
|
local long_conn_mode ws_server_hostname ws_server_port ws_server_path
|
||||||
|
local mqtt_server_hostname mqtt_server_port mqtt_username mqtt_password
|
||||||
|
local selected_long_conn
|
||||||
|
|
||||||
|
selected_long_conn=$(uci get wifidogx.common.selected_long_conn 2>/dev/null)
|
||||||
|
[ -z "$selected_long_conn" ] && return
|
||||||
|
|
||||||
|
if ! uci -q get wifidogx."$selected_long_conn" >/dev/null; then
|
||||||
|
echo "Long connection: selected section $selected_long_conn does not exist" >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
uci_validate_section "$NAME" "longconn" "$selected_long_conn" \
|
||||||
|
'long_conn_mode:or("ws","wss","mqtt","mqtts"):ws' \
|
||||||
|
'ws_server_hostname:string' \
|
||||||
|
'ws_server_port:port:443' \
|
||||||
|
'ws_server_path:string:/ws/wifidogx' \
|
||||||
|
'mqtt_server_hostname:string' \
|
||||||
|
'mqtt_server_port:port:1883' \
|
||||||
|
'mqtt_username:string' \
|
||||||
|
'mqtt_password:string'
|
||||||
|
|
||||||
|
case "$long_conn_mode" in
|
||||||
|
ws|wss)
|
||||||
|
if [ -z "$ws_server_hostname" ]; then
|
||||||
|
echo "Long connection: ws_server_hostname is required" >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
local ws_ssl
|
||||||
|
ws_ssl=$([ "$long_conn_mode" = "wss" ] && echo 1 || echo 0)
|
||||||
|
printf "WebSocket {\n\tWSServer %s\n\tWSServerPort %s\n\tWSServerPath %s\n\tWSServerSSL %s\n}\n" \
|
||||||
|
"$ws_server_hostname" "$ws_server_port" "$ws_server_path" "$ws_ssl" >> "$CONFIGFILE"
|
||||||
|
;;
|
||||||
|
mqtt|mqtts)
|
||||||
|
if [ -z "$mqtt_server_hostname" ]; then
|
||||||
|
echo "Long connection: mqtt_server_hostname is required" >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
local mqtt_ssl
|
||||||
|
mqtt_ssl=$([ "$long_conn_mode" = "mqtts" ] && echo 1 || echo 0)
|
||||||
|
printf "mqtt {\n\tserveraddr %s\n\tserverport %s\n\tmqttUseSSL %s\n\tmqttUsername %s\n\tmqttPassword %s\n}\n" \
|
||||||
|
"$mqtt_server_hostname" "$mqtt_server_port" "$mqtt_ssl" "${mqtt_username:-}" "${mqtt_password:-}" >> "$CONFIGFILE"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_external_interface() {
|
||||||
|
[ -z "$external_interface" ] && echo "No ExternalInterface " >&2 && return
|
||||||
|
local external_interface_name
|
||||||
|
|
||||||
|
if [ "$external_interface" = "wwan" ]; then
|
||||||
|
external_interface_name=$(ubus call network.interface."$external_interface" status | jsonfilter -e '@.device')
|
||||||
|
else
|
||||||
|
external_interface_name=$(uci get network."$external_interface".device)
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -z "$external_interface_name" ] && echo "Failed to get device name for $external_interface" >&2 && return
|
||||||
|
|
||||||
|
printf "ExternalInterface %s\n" "$external_interface_name" >> "$CONFIGFILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_wifidog_conf() {
|
||||||
|
[ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
|
||||||
|
local auth_server_mode_value='"cloud", "bypass", "local"'
|
||||||
|
|
||||||
|
# 获取选中的认证服务器
|
||||||
|
local selected_auth_server
|
||||||
|
selected_auth_server=$(uci get wifidogx.common.selected_auth_server 2>/dev/null)
|
||||||
|
|
||||||
|
|
||||||
|
uci_validate_section "$NAME" "$NAME" common \
|
||||||
|
'enabled:bool:0' \
|
||||||
|
"auth_server_mode:or($auth_server_mode_value)" \
|
||||||
|
'selected_auth_server:string' \
|
||||||
|
'selected_long_conn:string' \
|
||||||
|
'log_level:integer:7' \
|
||||||
|
'device_id:string' \
|
||||||
|
'check_interval:integer:60' \
|
||||||
|
'client_timeout:integer:5' \
|
||||||
|
'wired_passed:bool:1' \
|
||||||
|
'apple_cna:bool:0' \
|
||||||
|
'trusted_domains:list(host)' \
|
||||||
|
'trusted_wildcard_domains:list(string)' \
|
||||||
|
'trusted_macs:list(string)' \
|
||||||
|
'app_white_list:list(string)' \
|
||||||
|
'mac_white_list:list(string)' \
|
||||||
|
'wildcard_white_list:list(string)' \
|
||||||
|
'js_filter:bool:1' \
|
||||||
|
'auth_server_offline_file:string' \
|
||||||
|
'internet_offline_file:string' \
|
||||||
|
'local_portal:string' \
|
||||||
|
'external_interface:string' \
|
||||||
|
'enable_anti_nat:bool:0' \
|
||||||
|
'enable_privileged_ops:bool:0' \
|
||||||
|
'privileged_ops_secret:string:chawrt@2026' \
|
||||||
|
'ttl_values:string:64,128' \
|
||||||
|
'anti_nat_permit_macs:string' \
|
||||||
|
'disable_portal_auth:bool:1' \
|
||||||
|
'ap_device_id:string' \
|
||||||
|
'ap_mac_address:string' \
|
||||||
|
'ap_longitude:string' \
|
||||||
|
'ap_latitude:string' \
|
||||||
|
'location_id:string'
|
||||||
|
|
||||||
|
[ -n "$app_white_list" ] && add_white_list_entries "app_white_list" "domain_name" "trusted_domains"
|
||||||
|
[ -n "$mac_white_list" ] && add_white_list_entries "mac_white_list" "mac_address" "trusted_macs"
|
||||||
|
[ -n "$wildcard_white_list" ] && add_white_list_entries "wildcard_white_list" "wildcard_domain" "trusted_wildcard_domains"
|
||||||
|
|
||||||
|
prepare_external_interface
|
||||||
|
prepare_auth_server_settings
|
||||||
|
prepare_longconn_settings
|
||||||
|
prepare_device_info
|
||||||
|
config_foreach handle_gateway gateway
|
||||||
|
prepare_common_settings
|
||||||
|
}
|
||||||
|
|
||||||
|
service_triggers() {
|
||||||
|
procd_add_reload_trigger "wifidogx"
|
||||||
|
}
|
||||||
|
|
||||||
|
start_service() {
|
||||||
|
config_load "$NAME"
|
||||||
|
|
||||||
|
prepare_wifidog_conf
|
||||||
|
|
||||||
|
if [ "$enabled" -eq 0 ]; then
|
||||||
|
echo "wifidogx is disabled, exit..." >&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
procd_open_instance
|
||||||
|
procd_set_param command "$PROG" -c "$CONFIGFILE" -s -f -d "$log_level"
|
||||||
|
procd_set_param respawn
|
||||||
|
procd_set_param file /etc/config/wifidogx
|
||||||
|
procd_close_instance
|
||||||
|
}
|
||||||
|
|
||||||
|
status_service() {
|
||||||
|
/usr/bin/wdctlx status
|
||||||
|
}
|
||||||
|
|
||||||
|
reload_service() {
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
}
|
||||||
+2
-2
@@ -10,8 +10,8 @@ include $(TOPDIR)/rules.mk
|
|||||||
PKG_ARCH_BAIDUDRIVE:=$(ARCH)
|
PKG_ARCH_BAIDUDRIVE:=$(ARCH)
|
||||||
|
|
||||||
PKG_NAME:=baidudrive
|
PKG_NAME:=baidudrive
|
||||||
PKG_VERSION:=dockermanager-runtime-v0.1.1
|
PKG_VERSION:=1.0.6
|
||||||
PKG_RELEASE:=16
|
PKG_RELEASE:=21
|
||||||
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/baidudrive-runtime-v$(PKG_VERSION)/
|
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/baidudrive-runtime-v$(PKG_VERSION)/
|
||||||
PKG_HASH:=skip
|
PKG_HASH:=skip
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=BaiduPCS-Go
|
PKG_NAME:=BaiduPCS-Go
|
||||||
PKG_VERSION:=4.0.2
|
PKG_VERSION:=4.0.2
|
||||||
PKG_RELEASE:=8
|
PKG_RELEASE:=9
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/qjfoidnh/BaiduPCS-Go/tar.gz/v$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/qjfoidnh/BaiduPCS-Go/tar.gz/v$(PKG_VERSION)?
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user